mirror of
https://github.com/OpenNebula/one.git
synced 2025-03-23 22:50:09 +03:00
Initial commit of ONE code
git-svn-id: http://svn.opennebula.org/trunk@2 3034c82b-c49b-4eb3-8279-a7acafdc01c0
This commit is contained in:
parent
ee0b0729ba
commit
6eb9fed97d
96
SConstruct
Normal file
96
SConstruct
Normal file
@ -0,0 +1,96 @@
|
||||
|
||||
import os
|
||||
import sys
|
||||
sys.path.append("./share/scons")
|
||||
from lex_bison import *
|
||||
|
||||
# This is the absolute path where the project is located
|
||||
cwd=os.getcwd()
|
||||
|
||||
# Environment that will be applied to each scons child
|
||||
main_env=Environment()
|
||||
main_env['ENV']['PATH']=os.environ['PATH']
|
||||
|
||||
# Add builders for flex and bison
|
||||
add_lex(main_env)
|
||||
add_bison(main_env)
|
||||
|
||||
|
||||
# Include dirs
|
||||
main_env.Append(CPPPATH=[
|
||||
cwd+'/include',
|
||||
])
|
||||
|
||||
# Library dirs
|
||||
main_env.Append(LIBPATH=[
|
||||
cwd+'/src/common',
|
||||
cwd+'/src/host',
|
||||
cwd+'/src/mad',
|
||||
cwd+'/src/nebula',
|
||||
cwd+'/src/pool',
|
||||
cwd+'/src/template',
|
||||
cwd+'/src/vm',
|
||||
cwd+'/src/vmm',
|
||||
cwd+'/src/lcm',
|
||||
cwd+'/src/tm',
|
||||
cwd+'/src/dm',
|
||||
cwd+'/src/im',
|
||||
cwd+'/src/rm',
|
||||
])
|
||||
|
||||
# Compile flags
|
||||
main_env.Append(CPPFLAGS=[
|
||||
"-g",
|
||||
"-Wall"
|
||||
])
|
||||
|
||||
# Linking flags
|
||||
main_env.Append(LDFLAGS=["-g"])
|
||||
|
||||
#######################
|
||||
# EXTRA CONFIGURATION #
|
||||
#######################
|
||||
|
||||
# SQLITE
|
||||
sqlite_dir=ARGUMENTS.get('sqlite', 'none')
|
||||
if sqlite_dir!='none':
|
||||
main_env.Append(LIBPATH=[sqlite_dir+"/lib"])
|
||||
main_env.Append(CPPPATH=[sqlite_dir+"/include"])
|
||||
|
||||
# xmlrpc
|
||||
xmlrpc_dir=ARGUMENTS.get('xmlrpc', 'none')
|
||||
if xmlrpc_dir!='none':
|
||||
main_env.Append(LIBPATH=[xmlrpc_dir+"/lib"])
|
||||
main_env.Append(CPPPATH=[xmlrpc_dir+"/include"])
|
||||
|
||||
# build lex/bison
|
||||
build_parsers=ARGUMENTS.get('parsers', 'no')
|
||||
if build_parsers=='yes':
|
||||
main_env.Append(parsers='yes')
|
||||
else:
|
||||
main_env.Append(parsers='no')
|
||||
|
||||
|
||||
# SCONS scripts to build
|
||||
build_scripts=[
|
||||
'src/common/SConstruct',
|
||||
'src/template/SConstruct',
|
||||
'src/host/SConstruct',
|
||||
'src/mad/SConstruct',
|
||||
'src/nebula/SConstruct',
|
||||
'src/pool/SConstruct',
|
||||
'src/vm/SConstruct',
|
||||
'src/vmm/SConstruct',
|
||||
'src/lcm/SConstruct',
|
||||
'src/rm/SConstruct',
|
||||
'src/tm/SConstruct',
|
||||
'src/im/SConstruct',
|
||||
'src/dm/SConstruct',
|
||||
'src/scheduler/SConstruct',
|
||||
]
|
||||
|
||||
for script in build_scripts:
|
||||
env=main_env.Clone()
|
||||
SConscript(script, exports='env')
|
||||
|
||||
|
155
include/ActionManager.h
Normal file
155
include/ActionManager.h
Normal file
@ -0,0 +1,155 @@
|
||||
/* -------------------------------------------------------------------------- */
|
||||
/* Copyright 2002-2008, Distributed Systems Architecture Group, Universidad */
|
||||
/* Complutense de Madrid (dsa-research.org) */
|
||||
/* */
|
||||
/* Licensed under the Apache License, Version 2.0 (the "License"); you may */
|
||||
/* not use this file except in compliance with the License. You may obtain */
|
||||
/* a copy of the License at */
|
||||
/* */
|
||||
/* http://www.apache.org/licenses/LICENSE-2.0 */
|
||||
/* */
|
||||
/* Unless required by applicable law or agreed to in writing, software */
|
||||
/* distributed under the License is distributed on an "AS IS" BASIS, */
|
||||
/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. */
|
||||
/* See the License for the specific language governing permissions and */
|
||||
/* limitations under the License. */
|
||||
/* -------------------------------------------------------------------------- */
|
||||
|
||||
#ifndef ACTION_MANAGER_H_
|
||||
#define ACTION_MANAGER_H_
|
||||
|
||||
#include <queue>
|
||||
#include <pthread.h>
|
||||
#include <ctime>
|
||||
#include <string>
|
||||
|
||||
using namespace std;
|
||||
|
||||
|
||||
/**
|
||||
* ActionListener class. Interface to be implemented by any class
|
||||
* that need to handle actions. There are two predefined actions
|
||||
* (each action is identified with its name, a string):
|
||||
* - ACTION_TIMER, periodic action
|
||||
* - ACTION_FINALIZE, to finalize the action loop
|
||||
*/
|
||||
|
||||
class ActionListener
|
||||
{
|
||||
public:
|
||||
|
||||
/**
|
||||
* Predefined string to refer to the periodic action
|
||||
*/
|
||||
static const string ACTION_TIMER;
|
||||
|
||||
/**
|
||||
* Predefined string to refer to the finalize action
|
||||
*/
|
||||
static const string ACTION_FINALIZE;
|
||||
|
||||
ActionListener(){};
|
||||
|
||||
virtual ~ActionListener(){};
|
||||
|
||||
/**
|
||||
* the do_action() function is executed upon action arrival.
|
||||
* This function should check the action type, and perform the
|
||||
* corresponding action.
|
||||
* @param name the action name
|
||||
* @param args action arguments
|
||||
*/
|
||||
virtual void do_action(const string &name, void *args) = 0;
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* ActionManager. Provides action support for a class implementing
|
||||
* the ActionListener interface.
|
||||
*/
|
||||
|
||||
class ActionManager
|
||||
{
|
||||
public:
|
||||
|
||||
ActionManager();
|
||||
virtual ~ActionManager();
|
||||
|
||||
/** Function to trigger an action to this manager.
|
||||
* @param action the action name
|
||||
* @param args arguments for the action
|
||||
*/
|
||||
void trigger(
|
||||
const string &action,
|
||||
void * args);
|
||||
|
||||
/** The calling thread will be suspended until an action is triggeed.
|
||||
* @param timeout for the periodic action. Use 0 to disable the timer.
|
||||
* @param timer_args arguments for the timer action
|
||||
*/
|
||||
void loop(
|
||||
time_t timeout,
|
||||
void * timer_args);
|
||||
|
||||
/** Register the calling object in this action manager.
|
||||
* @param listener a pointer to the action listner
|
||||
*/
|
||||
void addListener(
|
||||
ActionListener * listener)
|
||||
{
|
||||
this->listener = listener;
|
||||
};
|
||||
|
||||
private:
|
||||
|
||||
/**
|
||||
* Implementation class, pending actions are stored in a queue.
|
||||
* Each element stores the action name and its arguments
|
||||
*/
|
||||
struct ActionRequest
|
||||
{
|
||||
string name;
|
||||
void * args;
|
||||
|
||||
ActionRequest(
|
||||
const string &aname = "",
|
||||
void * aargs = 0):
|
||||
name(aname),
|
||||
args(aargs){};
|
||||
};
|
||||
|
||||
/**
|
||||
* Queue of pending actions, processed in a FIFO manner
|
||||
*/
|
||||
queue<ActionRequest> actions;
|
||||
|
||||
/**
|
||||
* Action synchronization is implemented using the pthread library,
|
||||
* with condition variable and its associated mutex
|
||||
*/
|
||||
pthread_mutex_t mutex;
|
||||
pthread_cond_t cond;
|
||||
|
||||
/**
|
||||
* The listener notified by this manager
|
||||
*/
|
||||
ActionListener * listener;
|
||||
|
||||
/**
|
||||
* Function to lock the Manager mutex
|
||||
*/
|
||||
void lock()
|
||||
{
|
||||
pthread_mutex_lock(&mutex);
|
||||
};
|
||||
|
||||
/**
|
||||
* Function to unlock the Manager mutex
|
||||
*/
|
||||
void unlock()
|
||||
{
|
||||
pthread_mutex_unlock(&mutex);
|
||||
};
|
||||
};
|
||||
|
||||
#endif /*ACTION_MANAGER_H_*/
|
218
include/Attribute.h
Normal file
218
include/Attribute.h
Normal file
@ -0,0 +1,218 @@
|
||||
/* -------------------------------------------------------------------------- */
|
||||
/* Copyright 2002-2008, Distributed Systems Architecture Group, Universidad */
|
||||
/* Complutense de Madrid (dsa-research.org) */
|
||||
/* */
|
||||
/* Licensed under the Apache License, Version 2.0 (the "License"); you may */
|
||||
/* not use this file except in compliance with the License. You may obtain */
|
||||
/* a copy of the License at */
|
||||
/* */
|
||||
/* http://www.apache.org/licenses/LICENSE-2.0 */
|
||||
/* */
|
||||
/* Unless required by applicable law or agreed to in writing, software */
|
||||
/* distributed under the License is distributed on an "AS IS" BASIS, */
|
||||
/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. */
|
||||
/* See the License for the specific language governing permissions and */
|
||||
/* limitations under the License. */
|
||||
/* -------------------------------------------------------------------------- */
|
||||
|
||||
#ifndef ATTRIBUTE_H_
|
||||
#define ATTRIBUTE_H_
|
||||
|
||||
#include <string>
|
||||
#include <map>
|
||||
#include <sstream>
|
||||
|
||||
using namespace std;
|
||||
|
||||
/**
|
||||
* Attribute base class for name-value pairs. This class provides a generic
|
||||
* interface to implement
|
||||
*/
|
||||
class Attribute
|
||||
{
|
||||
public:
|
||||
|
||||
Attribute(string& aname):attribute_name(aname)
|
||||
{
|
||||
transform (
|
||||
attribute_name.begin(),
|
||||
attribute_name.end(),
|
||||
attribute_name.begin(),
|
||||
(int(*)(int))toupper);
|
||||
};
|
||||
|
||||
Attribute(const char * aname)
|
||||
{
|
||||
ostringstream name;
|
||||
|
||||
name << uppercase << aname;
|
||||
attribute_name = name.str();
|
||||
};
|
||||
|
||||
virtual ~Attribute(){};
|
||||
|
||||
enum AttributeType
|
||||
{
|
||||
SIMPLE = 0,
|
||||
VECTOR = 1
|
||||
};
|
||||
|
||||
/**
|
||||
* Gets the name of the attribute.
|
||||
* @return the attribute name
|
||||
*/
|
||||
const string& name() const
|
||||
{
|
||||
return attribute_name;
|
||||
};
|
||||
|
||||
/**
|
||||
* Marshall the attribute in a single string. The string MUST be freed
|
||||
* by the calling function.
|
||||
* @return a string (allocated in the heap) holding the attribute value.
|
||||
*/
|
||||
virtual string * marshall() = 0;
|
||||
|
||||
/**
|
||||
* Builds a new attribute from a string.
|
||||
*/
|
||||
virtual void unmarshall(string& sattr) = 0;
|
||||
|
||||
/**
|
||||
* Returns the attribute type
|
||||
*/
|
||||
virtual AttributeType type() = 0;
|
||||
|
||||
private:
|
||||
|
||||
/**
|
||||
* The attribute name.
|
||||
*/
|
||||
string attribute_name;
|
||||
};
|
||||
|
||||
/* -------------------------------------------------------------------------- */
|
||||
/* -------------------------------------------------------------------------- */
|
||||
|
||||
/**
|
||||
* The SingleAttribute class represents a simple attribute in the form
|
||||
* NAME = VALUE.
|
||||
*/
|
||||
|
||||
class SingleAttribute : public Attribute
|
||||
{
|
||||
public:
|
||||
|
||||
SingleAttribute(string& name):Attribute(name){};
|
||||
|
||||
SingleAttribute(string& name, string& value):
|
||||
Attribute(name),attribute_value(value){};
|
||||
|
||||
SingleAttribute(const char * name, string& value):
|
||||
Attribute(name),attribute_value(value){};
|
||||
|
||||
~SingleAttribute(){};
|
||||
|
||||
/**
|
||||
* Returns the attribute value, a string.
|
||||
*/
|
||||
const string& value() const
|
||||
{
|
||||
return attribute_value;
|
||||
};
|
||||
|
||||
/**
|
||||
* Marshall the attribute in a single string. The string MUST be freed
|
||||
* by the calling function.
|
||||
* @return a string (allocated in the heap) holding the attribute value.
|
||||
*/
|
||||
string * marshall()
|
||||
{
|
||||
string * rs = new string;
|
||||
|
||||
*rs = attribute_value;
|
||||
|
||||
return rs;
|
||||
};
|
||||
|
||||
/**
|
||||
* Builds a new attribute from a string.
|
||||
*/
|
||||
void unmarshall(string& sattr)
|
||||
{
|
||||
attribute_value = sattr;
|
||||
};
|
||||
|
||||
/**
|
||||
* Returns the attribute type
|
||||
*/
|
||||
AttributeType type()
|
||||
{
|
||||
return SIMPLE;
|
||||
};
|
||||
|
||||
private:
|
||||
|
||||
string attribute_value;
|
||||
};
|
||||
|
||||
/* -------------------------------------------------------------------------- */
|
||||
/* -------------------------------------------------------------------------- */
|
||||
|
||||
/**
|
||||
* The VectorAttribute class represents an array attribute in the form
|
||||
* NAME = [ VAL_NAME_1=VAL_VALUE_1,...,VAL_NAME_N=VAL_VALUE_N].
|
||||
*/
|
||||
|
||||
class VectorAttribute : public Attribute
|
||||
{
|
||||
public:
|
||||
|
||||
VectorAttribute(string& name):Attribute(name){};
|
||||
|
||||
VectorAttribute(string& name, map<string,string>& value):
|
||||
Attribute(name),attribute_value(value){};
|
||||
|
||||
~VectorAttribute(){};
|
||||
|
||||
/**
|
||||
* Returns the attribute value, a string.
|
||||
*/
|
||||
const map<string,string>& value() const
|
||||
{
|
||||
return attribute_value;
|
||||
};
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
string vector_value(const char *name) const;
|
||||
|
||||
/**
|
||||
* Marshall the attribute in a single string. The string MUST be freed
|
||||
* by the calling function. The string is in the form:
|
||||
* "VAL_NAME_1=VAL_VALUE_1,...,VAL_NAME_N=VAL_VALUE_N".
|
||||
* @return a string (allocated in the heap) holding the attribute value.
|
||||
*/
|
||||
string * marshall();
|
||||
|
||||
/**
|
||||
* Builds a new attribute from a string of the form:
|
||||
* "VAL_NAME_1=VAL_VALUE_1,...,VAL_NAME_N=VAL_VALUE_N".
|
||||
*/
|
||||
void unmarshall(string& sattr);
|
||||
|
||||
/**
|
||||
* Returns the attribute type
|
||||
*/
|
||||
AttributeType type()
|
||||
{
|
||||
return VECTOR;
|
||||
};
|
||||
|
||||
private:
|
||||
|
||||
map<string,string> attribute_value;
|
||||
};
|
||||
|
||||
#endif /*ATTRIBUTE_H_*/
|
260
include/DispatchManager.h
Normal file
260
include/DispatchManager.h
Normal file
@ -0,0 +1,260 @@
|
||||
/* -------------------------------------------------------------------------- */
|
||||
/* Copyright 2002-2008, Distributed Systems Architecture Group, Universidad */
|
||||
/* Complutense de Madrid (dsa-research.org) */
|
||||
/* */
|
||||
/* Licensed under the Apache License, Version 2.0 (the "License"); you may */
|
||||
/* not use this file except in compliance with the License. You may obtain */
|
||||
/* a copy of the License at */
|
||||
/* */
|
||||
/* http://www.apache.org/licenses/LICENSE-2.0 */
|
||||
/* */
|
||||
/* Unless required by applicable law or agreed to in writing, software */
|
||||
/* distributed under the License is distributed on an "AS IS" BASIS, */
|
||||
/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. */
|
||||
/* See the License for the specific language governing permissions and */
|
||||
/* limitations under the License. */
|
||||
/* -------------------------------------------------------------------------- */
|
||||
|
||||
#ifndef DISPATCH_MANAGER_H_
|
||||
#define DISPATCH_MANAGER_H_
|
||||
|
||||
#include "ActionManager.h"
|
||||
#include "HostPool.h"
|
||||
#include "VirtualMachinePool.h"
|
||||
|
||||
using namespace std;
|
||||
|
||||
extern "C" void * dm_action_loop(void *arg);
|
||||
|
||||
class DispatchManager : public ActionListener
|
||||
{
|
||||
public:
|
||||
|
||||
DispatchManager(
|
||||
VirtualMachinePool * _vmpool,
|
||||
HostPool * _hpool):
|
||||
hpool(_hpool),
|
||||
vmpool(_vmpool)
|
||||
{
|
||||
am.addListener(this);
|
||||
};
|
||||
|
||||
~DispatchManager()
|
||||
{}
|
||||
;
|
||||
|
||||
enum Actions
|
||||
{
|
||||
SUSPEND_SUCCESS, /**< Send by LCM when a VM is suspended*/
|
||||
SUSPEND_FAILURE, /**< Send by LCM when a VM could not be suspended*/
|
||||
STOP_SUCCESS, /**< Send by LCM when a VM is stopped*/
|
||||
STOP_FAILURE, /**< Send by LCM when a VM could not be stopped*/
|
||||
MIGRATE_FAILURE, /**< Send by LCM when a VM could not be migrated*/
|
||||
DONE, /**< Send by LCM when a VM is shut down*/
|
||||
FAILED, /**< Send by LCM when one of the execution steps fails*/
|
||||
FINALIZE
|
||||
};
|
||||
|
||||
/**
|
||||
* Triggers specific actions to the Dispatch Manager. This function
|
||||
* wraps the ActionManager trigger function.
|
||||
* @param action the DM action
|
||||
* @param vid VM unique id. This is the argument of the passed to the
|
||||
* invoked action.
|
||||
*/
|
||||
void trigger(
|
||||
Actions action,
|
||||
int _vid);
|
||||
|
||||
/**
|
||||
* This functions creates a new thread for the Dispatch Manager. This
|
||||
* thread will wait in an action loop till it receives ACTION_FINALIZE.
|
||||
* @return 0 on success.
|
||||
*/
|
||||
int start();
|
||||
|
||||
/**
|
||||
* Gets the thread identification.
|
||||
* @return pthread_t for the manager thread (that in the action loop).
|
||||
*/
|
||||
pthread_t get_thread_id() const
|
||||
{
|
||||
return dm_thread;
|
||||
};
|
||||
|
||||
//--------------------------------------------------------------------------
|
||||
// DM Actions, the RM and the Scheduler will invoke this methods
|
||||
//--------------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Allocates a new virtual machine
|
||||
* @return 0 on success
|
||||
*/
|
||||
int allocate (
|
||||
int uid,
|
||||
const string& stemplate,
|
||||
int * oid);
|
||||
|
||||
/**
|
||||
* Deploys a VM. A new history record MUST be added before calling this
|
||||
* function. Also the VM MUST have its mutex locked. If the function fails
|
||||
* the calling funtion is responsible for recovering from the error.
|
||||
* @param vm pointer to a VirtualMachine with its mutex locked.
|
||||
* @return 0 on success
|
||||
*/
|
||||
int deploy (
|
||||
VirtualMachine * vm);
|
||||
|
||||
/**
|
||||
* Migrates a VM. The following actions must be performed before calling
|
||||
* this function:
|
||||
* - Lock the VM mutex.
|
||||
* - Update the History statistics of the current host.
|
||||
* - Add a new History record with the new host.
|
||||
* If the function fails the calling funtion is responsible for recovering
|
||||
* from the error.
|
||||
* @param vm pointer to a VirtualMachine with its mutex locked.
|
||||
* @return 0 on success
|
||||
*/
|
||||
int migrate(
|
||||
VirtualMachine * vm);
|
||||
|
||||
/**
|
||||
* Migrates a VM. The following actions must be performed before calling
|
||||
* this function:
|
||||
* - Lock the VM mutex.
|
||||
* - Update the History statistics of the current host.
|
||||
* - Add a new History record with the new host.
|
||||
* If the function fails the calling funtion is responsible for recovering
|
||||
* from the error.
|
||||
* @param vm pointer to a VirtualMachine with its mutex locked.
|
||||
* @return 0 on success
|
||||
*/
|
||||
int live_migrate(
|
||||
VirtualMachine * vm);
|
||||
|
||||
/**
|
||||
* Shuts down a VM.
|
||||
* @param vid VirtualMachine identification
|
||||
* @return 0 on success, -1 if the VM does not exits or -2 if the VM is
|
||||
* in a wrong a state
|
||||
*/
|
||||
int shutdown (
|
||||
int vid);
|
||||
|
||||
/**
|
||||
* Holds a VM.
|
||||
* @param vid VirtualMachine identification
|
||||
* @return 0 on success, -1 if the VM does not exits or -2 if the VM is
|
||||
* in a wrong a state
|
||||
*/
|
||||
int hold(
|
||||
int vid);
|
||||
|
||||
/**
|
||||
* Releases a VM.
|
||||
* @param vid VirtualMachine identification
|
||||
* @return 0 on success, -1 if the VM does not exits or -2 if the VM is
|
||||
* in a wrong a state
|
||||
*/
|
||||
int release(
|
||||
int vid);
|
||||
|
||||
/**
|
||||
* Stops a VM.
|
||||
* @param vid VirtualMachine identification
|
||||
* @return 0 on success, -1 if the VM does not exits or -2 if the VM is
|
||||
* in a wrong a state
|
||||
*/
|
||||
int stop(
|
||||
int vid);
|
||||
|
||||
/**
|
||||
* Suspends a VM.
|
||||
* @param vid VirtualMachine identification
|
||||
* @return 0 on success, -1 if the VM does not exits or -2 if the VM is
|
||||
* in a wrong a state
|
||||
*/
|
||||
int suspend(
|
||||
int vid);
|
||||
|
||||
/**
|
||||
* Resumes a VM.
|
||||
* @param vid VirtualMachine identification
|
||||
* @return 0 on success, -1 if the VM does not exits or -2 if the VM is
|
||||
* in a wrong a state
|
||||
*/
|
||||
int resume(
|
||||
int vid);
|
||||
|
||||
/**
|
||||
* Ends a VM life cycle inside ONE.
|
||||
* @param vid VirtualMachine identification
|
||||
* @return 0 on success, -1 if the VM does not exits or -2 if the VM is
|
||||
* in a wrong a state
|
||||
*/
|
||||
int finalize(
|
||||
int vid);
|
||||
|
||||
private:
|
||||
/**
|
||||
* Thread id for the Dispatch Manager
|
||||
*/
|
||||
pthread_t dm_thread;
|
||||
|
||||
/**
|
||||
* Pointer to the Host Pool, to access hosts
|
||||
*/
|
||||
HostPool * hpool;
|
||||
|
||||
/**
|
||||
* Pointer to the Host Pool, to access hosts
|
||||
*/
|
||||
VirtualMachinePool * vmpool;
|
||||
|
||||
/**
|
||||
* Action engine for the Manager
|
||||
*/
|
||||
ActionManager am;
|
||||
|
||||
/**
|
||||
* Function to execute the Manager action loop method within a new pthread
|
||||
* (requires C linkage)
|
||||
*/
|
||||
friend void * dm_action_loop(void *arg);
|
||||
|
||||
/**
|
||||
* The action function executed when an action is triggered.
|
||||
* @param action the name of the action
|
||||
* @param arg arguments for the action function
|
||||
*/
|
||||
void do_action(
|
||||
const string & action,
|
||||
void * arg);
|
||||
|
||||
//--------------------------------------------------------------------------
|
||||
// DM Actions associated with a VM state transition
|
||||
//--------------------------------------------------------------------------
|
||||
|
||||
void suspend_success_action(int vid);
|
||||
|
||||
void suspend_failure_action(int vid);
|
||||
|
||||
void stop_success_action(int vid);
|
||||
|
||||
void stop_failure_action(int vid);
|
||||
|
||||
void migrate_failure_action(int vid);
|
||||
|
||||
void done_action(int vid);
|
||||
|
||||
void failed_action(int vid);
|
||||
|
||||
void host_add_vm(VirtualMachine *vm);
|
||||
|
||||
void host_del_vm(VirtualMachine *vm);
|
||||
|
||||
};
|
||||
|
||||
#endif /*DISPATCH_MANAGER_H*/
|
||||
|
234
include/History.h
Normal file
234
include/History.h
Normal file
@ -0,0 +1,234 @@
|
||||
/* -------------------------------------------------------------------------- */
|
||||
/* Copyright 2002-2008, Distributed Systems Architecture Group, Universidad */
|
||||
/* Complutense de Madrid (dsa-research.org) */
|
||||
/* */
|
||||
/* Licensed under the Apache License, Version 2.0 (the "License"); you may */
|
||||
/* not use this file except in compliance with the License. You may obtain */
|
||||
/* a copy of the License at */
|
||||
/* */
|
||||
/* http://www.apache.org/licenses/LICENSE-2.0 */
|
||||
/* */
|
||||
/* Unless required by applicable law or agreed to in writing, software */
|
||||
/* distributed under the License is distributed on an "AS IS" BASIS, */
|
||||
/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. */
|
||||
/* See the License for the specific language governing permissions and */
|
||||
/* limitations under the License. */
|
||||
/* -------------------------------------------------------------------------- */
|
||||
|
||||
#ifndef HISTORY_H_
|
||||
#define HISTORY_H_
|
||||
|
||||
#include <sqlite3.h>
|
||||
#include "ObjectSQL.h"
|
||||
|
||||
using namespace std;
|
||||
|
||||
extern "C" int history_select_cb (
|
||||
void * _history,
|
||||
int num,
|
||||
char ** values,
|
||||
char ** names);
|
||||
|
||||
/**
|
||||
* The History class, it represents an execution record of a Virtual Machine.
|
||||
*/
|
||||
|
||||
class History:public ObjectSQL
|
||||
{
|
||||
public:
|
||||
|
||||
History(int oid);
|
||||
|
||||
History(
|
||||
int oid,
|
||||
int seq,
|
||||
int hid,
|
||||
string& hostname,
|
||||
string& vm_dir,
|
||||
string& vmm,
|
||||
string& tm);
|
||||
|
||||
~History(){};
|
||||
|
||||
enum MigrationReason
|
||||
{
|
||||
NONE,
|
||||
ERROR,
|
||||
STOP_RESUME,
|
||||
PERFORMANCE,
|
||||
USER,
|
||||
RESCHEDULING,
|
||||
KILL
|
||||
};
|
||||
|
||||
private:
|
||||
friend class VirtualMachine;
|
||||
|
||||
// ----------------------------------------
|
||||
// DataBase implementation variables
|
||||
// ----------------------------------------
|
||||
enum ColNames
|
||||
{
|
||||
OID = 0,
|
||||
SEQ = 1,
|
||||
HOSTNAME = 2,
|
||||
VM_DIR = 3,
|
||||
HID = 4,
|
||||
VMMMAD = 5,
|
||||
TMMAD = 6,
|
||||
STIME = 7,
|
||||
ETIME = 8,
|
||||
PROLOG_STIME = 9,
|
||||
PROLOG_ETIME = 10,
|
||||
RUNNING_STIME = 11,
|
||||
RUNNING_ETIME = 12,
|
||||
EPILOG_STIME = 13,
|
||||
EPILOG_ETIME = 14,
|
||||
REASON = 15,
|
||||
LIMIT = 16
|
||||
};
|
||||
|
||||
static const char * table;
|
||||
|
||||
static const char * db_names;
|
||||
|
||||
static const char * db_bootstrap;
|
||||
|
||||
void non_persistent_data();
|
||||
|
||||
static string column_name(const ColNames column)
|
||||
{
|
||||
switch (column)
|
||||
{
|
||||
case HID:
|
||||
return "hid";
|
||||
case ETIME:
|
||||
return "etime";
|
||||
case RUNNING_ETIME:
|
||||
return "retime";
|
||||
default:
|
||||
return "";
|
||||
}
|
||||
}
|
||||
|
||||
// ----------------------------------------
|
||||
// History fields
|
||||
// ----------------------------------------
|
||||
int oid;
|
||||
int seq;
|
||||
|
||||
string hostname;
|
||||
string vm_rdir;
|
||||
|
||||
int hid;
|
||||
|
||||
string vmm_mad_name;
|
||||
string tm_mad_name;
|
||||
|
||||
time_t stime;
|
||||
time_t etime;
|
||||
|
||||
time_t prolog_stime;
|
||||
time_t prolog_etime;
|
||||
|
||||
time_t running_stime;
|
||||
time_t running_etime;
|
||||
|
||||
time_t epilog_stime;
|
||||
time_t epilog_etime;
|
||||
|
||||
MigrationReason reason;
|
||||
|
||||
//Non-persistent history fields
|
||||
string vm_lhome;
|
||||
string vm_rhome;
|
||||
|
||||
string deployment_lfile;
|
||||
string deployment_rfile;
|
||||
|
||||
string checkpoint_file;
|
||||
|
||||
friend int history_select_cb (
|
||||
void * _history,
|
||||
int num,
|
||||
char ** values,
|
||||
char ** names);
|
||||
|
||||
/**
|
||||
* Writes the history record in the DB
|
||||
* @param db pointer to the database.
|
||||
* @return 0 on success.
|
||||
*/
|
||||
int insert(SqliteDB * db);
|
||||
|
||||
/**
|
||||
* Reads the history record from the DB
|
||||
* @param db pointer to the database.
|
||||
* @return 0 on success.
|
||||
*/
|
||||
int select(SqliteDB * db);
|
||||
|
||||
/**
|
||||
* Removes the all history records from the DB
|
||||
* @param db pointer to the database.
|
||||
* @return 0 on success.
|
||||
|
||||
*/
|
||||
int drop(SqliteDB * db);
|
||||
|
||||
/**
|
||||
* Updates the history record
|
||||
* @param db pointer to the database.
|
||||
* @return 0 on success.
|
||||
*/
|
||||
int update(SqliteDB * db)
|
||||
{
|
||||
return insert(db);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the value of a column in the pool for a given object
|
||||
* @param db pointer to Database
|
||||
* @param column to be selected
|
||||
* @param where contidtion to select the column
|
||||
* @param value of the column
|
||||
* @return 0 on success
|
||||
*/
|
||||
int select_column(
|
||||
SqliteDB * db,
|
||||
const string& column,
|
||||
const string& where,
|
||||
string * value)
|
||||
{
|
||||
return ObjectSQL::select_column(db,table,column,where,value);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the value of a column in the pool for a given object
|
||||
* @param db pointer to Database
|
||||
* @param column to be selected
|
||||
* @param where contidtion to select the column
|
||||
* @param value of the column
|
||||
* @return 0 on success
|
||||
*/
|
||||
int update_column(
|
||||
SqliteDB * db,
|
||||
const string& column,
|
||||
const string& where,
|
||||
const string& value)
|
||||
{
|
||||
return ObjectSQL::update_column(db,table,column,where,value);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Function to unmarshall a history object
|
||||
* @param num the number of columns read from the DB
|
||||
* @para names the column names
|
||||
* @para vaues the column values
|
||||
* @return 0 on success
|
||||
*/
|
||||
int unmarshall(int num, char **names, char ** values);
|
||||
};
|
||||
|
||||
#endif /*HISTORY_H_*/
|
474
include/Host.h
Normal file
474
include/Host.h
Normal file
@ -0,0 +1,474 @@
|
||||
/* -------------------------------------------------------------------------- */
|
||||
/* Copyright 2002-2008, Distributed Systems Architecture Group, Universidad */
|
||||
/* Complutense de Madrid (dsa-research.org) */
|
||||
/* */
|
||||
/* Licensed under the Apache License, Version 2.0 (the "License"); you may */
|
||||
/* not use this file except in compliance with the License. You may obtain */
|
||||
/* a copy of the License at */
|
||||
/* */
|
||||
/* http://www.apache.org/licenses/LICENSE-2.0 */
|
||||
/* */
|
||||
/* Unless required by applicable law or agreed to in writing, software */
|
||||
/* distributed under the License is distributed on an "AS IS" BASIS, */
|
||||
/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. */
|
||||
/* See the License for the specific language governing permissions and */
|
||||
/* limitations under the License. */
|
||||
/* -------------------------------------------------------------------------- */
|
||||
|
||||
#ifndef HOST_H_
|
||||
#define HOST_H_
|
||||
|
||||
#include "PoolSQL.h"
|
||||
#include "HostShare.h"
|
||||
#include "HostTemplate.h"
|
||||
|
||||
using namespace std;
|
||||
|
||||
extern "C" int host_select_cb (void * _host, int num,char ** values, char ** names);
|
||||
|
||||
/* -------------------------------------------------------------------------- */
|
||||
/* -------------------------------------------------------------------------- */
|
||||
|
||||
/**
|
||||
* The Host class. It represents a Host...
|
||||
*/
|
||||
class Host : public PoolObjectSQL
|
||||
{
|
||||
public:
|
||||
|
||||
// ------------------------------------------------------------------------
|
||||
// Host States
|
||||
// ------------------------------------------------------------------------
|
||||
|
||||
enum HostState
|
||||
{
|
||||
INIT = 0, /**< Initial state for enabled hosts. */
|
||||
MONITORING = 1, /**< The host is being monitored. */
|
||||
MONITORED = 2, /**< The host has been successfully monitored. */
|
||||
ERROR = 3, /**< An error ocurrer while monitoring the host. */
|
||||
DISABLED = 4 /**< The host is disabled won't be monitored. */
|
||||
};
|
||||
|
||||
/**
|
||||
* Function to write a Host on an output stream
|
||||
*/
|
||||
friend ostream& operator<<(ostream& os, Host& h);
|
||||
|
||||
/**
|
||||
* Get the Host unique identifier HID, that matches the OID of the object
|
||||
* @return HID Host identifier
|
||||
*/
|
||||
int get_hid() const
|
||||
{
|
||||
return oid;
|
||||
};
|
||||
|
||||
/**
|
||||
* Check if the host is managed
|
||||
* @return true if the host is managed
|
||||
*/
|
||||
bool isManaged() const
|
||||
{
|
||||
return managed;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if the host is enabled
|
||||
* @return true if the host is enabled
|
||||
*/
|
||||
bool isEnabled() const
|
||||
{
|
||||
return state != DISABLED;
|
||||
}
|
||||
|
||||
/**
|
||||
* Updates the Host's last_monitored time stamp.
|
||||
* @param success if the monitored action was successfully performed
|
||||
*/
|
||||
void touch(bool success)
|
||||
{
|
||||
last_monitored = time(0);
|
||||
|
||||
if ( state != DISABLED) //Don't change the state is host is disabled
|
||||
{
|
||||
if (success == true)
|
||||
{
|
||||
state = MONITORED;
|
||||
}
|
||||
else
|
||||
{
|
||||
state = ERROR;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Disables the current host, it will not be monitored nor used by the
|
||||
* scheduler
|
||||
*/
|
||||
void disable()
|
||||
{
|
||||
state = DISABLED;
|
||||
};
|
||||
|
||||
/**
|
||||
* Enables the current host, it will be monitored and could be used by
|
||||
* the scheduler
|
||||
*/
|
||||
void enable()
|
||||
{
|
||||
state = INIT;
|
||||
};
|
||||
|
||||
/**
|
||||
* Returns host host_name
|
||||
* @return host_name Host's hostname
|
||||
*/
|
||||
const string& get_hostname() const
|
||||
{
|
||||
return hostname;
|
||||
};
|
||||
|
||||
/** Update host counters and update the whole host on the DB
|
||||
* @param parse_str string with values to be parsed
|
||||
* @return 0 on success
|
||||
**/
|
||||
int update_info(string &parse_str);
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
HostState get_state() const
|
||||
{
|
||||
return state;
|
||||
};
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
const string& get_vmm_mad() const
|
||||
{
|
||||
return vmm_mad_name;
|
||||
};
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
const string& get_tm_mad() const
|
||||
{
|
||||
return tm_mad_name;
|
||||
};
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
const string& get_im_mad() const
|
||||
{
|
||||
return im_mad_name;
|
||||
};
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
void set_state(HostState state)
|
||||
{
|
||||
this->state = state;
|
||||
};
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
time_t get_last_monitored() const
|
||||
{
|
||||
return last_monitored;
|
||||
};
|
||||
|
||||
// ------------------------------------------------------------------------
|
||||
// Template
|
||||
// ------------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Gets the values of a template attribute
|
||||
* @param name of the attribute
|
||||
* @param values of the attribute
|
||||
* @return the number of values
|
||||
*/
|
||||
int get_template_attribute(
|
||||
string& name,
|
||||
vector<const Attribute*>& values) const
|
||||
{
|
||||
return host_template.get(name,values);
|
||||
};
|
||||
|
||||
/**
|
||||
* Gets the values of a template attribute
|
||||
* @param name of the attribute
|
||||
* @param values of the attribute
|
||||
* @return the number of values
|
||||
*/
|
||||
int get_template_attribute(
|
||||
const char *name,
|
||||
vector<const Attribute*>& values) const
|
||||
{
|
||||
string str=name;
|
||||
return host_template.get(str,values);
|
||||
};
|
||||
|
||||
/**
|
||||
* Gets a string based host attribute
|
||||
* @param name of the attribute
|
||||
* @param value of the attribute (a string), will be "" if not defined
|
||||
*/
|
||||
void get_template_attribute(
|
||||
const char * name,
|
||||
string& value) const
|
||||
{
|
||||
string str=name;
|
||||
host_template.get(str,value);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets a string based host attribute
|
||||
* @param name of the attribute
|
||||
* @param value of the attribute (an int), will be 0 if not defined
|
||||
*/
|
||||
void get_template_attribute(
|
||||
const char * name,
|
||||
int& value) const
|
||||
{
|
||||
string str=name;
|
||||
host_template.get(str,value);
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------
|
||||
// Lex & bison parser for requirements and rank expressions
|
||||
// ---------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Evaluates a requirement expression on the given host.
|
||||
* @param requirements string
|
||||
* @param result true if the host matches the requirements
|
||||
* @param errmsg string describing the error, must be freed by the
|
||||
* calling function
|
||||
* @return 0 on success
|
||||
*/
|
||||
int match(const string& requirements, bool& result, char **errmsg);
|
||||
|
||||
/**
|
||||
* Evaluates a rank expression on the given host.
|
||||
* @param rank string
|
||||
* @param result of the rank evaluation
|
||||
* @param errmsg string describing the error, must be freed by the
|
||||
* calling function
|
||||
* @return 0 on success
|
||||
*/
|
||||
int rank(const string& rank, int& result, char **errmsg);
|
||||
|
||||
// ------------------------------------------------------------------------
|
||||
// Share functions
|
||||
// ------------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Adds a new VM to the given share by icrementing the cpu,mem and disk
|
||||
* counters
|
||||
* @param cpu needed by the VM (percentage)
|
||||
* @param mem needed by the VM (in Kb)
|
||||
* @param disk needed by the VM
|
||||
* @return 0 on success
|
||||
*/
|
||||
void add_vm(int cpu, int mem, int disk)
|
||||
{
|
||||
host_share.add(cpu,mem,disk);
|
||||
};
|
||||
|
||||
/**
|
||||
* Deletes a new VM from the given share by decrementing the cpu,mem and
|
||||
* disk counters
|
||||
* @param cpu useded by the VM (percentage)
|
||||
* @param mem used by the VM (in Kb)
|
||||
* @param disk used by the VM
|
||||
* @return 0 on success
|
||||
*/
|
||||
void del_vm(int cpu, int mem, int disk)
|
||||
{
|
||||
host_share.del(cpu,mem,disk);
|
||||
};
|
||||
|
||||
/**
|
||||
* Tests whether a new VM can be hosted by the host or not
|
||||
* @param cpu needed by the VM (percentage)
|
||||
* @param mem needed by the VM (in Kb)
|
||||
* @param disk needed by the VM
|
||||
* @return true if the share can host the VM
|
||||
*/
|
||||
bool test_vm(int cpu, int mem, int disk)
|
||||
{
|
||||
return host_share.test(cpu,mem,disk);
|
||||
}
|
||||
|
||||
private:
|
||||
// -------------------------------------------------------------------------
|
||||
// Friends
|
||||
// -------------------------------------------------------------------------
|
||||
|
||||
friend class HostPool;
|
||||
|
||||
friend int host_select_cb (
|
||||
void * _host,
|
||||
int num,
|
||||
char ** values,
|
||||
char ** names);
|
||||
|
||||
// -------------------------------------------------------------------------
|
||||
// Host Description
|
||||
// -------------------------------------------------------------------------
|
||||
|
||||
string hostname;
|
||||
|
||||
/**
|
||||
* The state of the Host
|
||||
*/
|
||||
HostState state;
|
||||
|
||||
/**
|
||||
* Name of the IM driver used to monitor this host
|
||||
*/
|
||||
string im_mad_name;
|
||||
|
||||
/**
|
||||
* Name of the VM driver used to execute VMs in this host
|
||||
*/
|
||||
string vmm_mad_name;
|
||||
|
||||
/**
|
||||
* Name of the TM driver used to transfer file to and from this host
|
||||
*/
|
||||
string tm_mad_name;
|
||||
|
||||
/**
|
||||
* If Host State = MONITORED last time it got fully monitored or 1 Jan 1970
|
||||
* Host State = MONITORING last time it got a signal to be monitored
|
||||
*/
|
||||
time_t last_monitored;
|
||||
|
||||
/**
|
||||
* This tells if this host pertains to a local managed cluster
|
||||
*/
|
||||
bool managed;
|
||||
|
||||
// -------------------------------------------------------------------------
|
||||
// Host Attributes
|
||||
// -------------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* The Host template, holds the Host attributes.
|
||||
*/
|
||||
HostTemplate host_template;
|
||||
|
||||
/**
|
||||
* This map holds pointers to all the Host's HostShares
|
||||
*/
|
||||
HostShare host_share;
|
||||
|
||||
// -------------------------------------------------------------------------
|
||||
// Lex & bison
|
||||
// -------------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Mutex to perform just one flex-bison parsing at a time
|
||||
*/
|
||||
static pthread_mutex_t lex_mutex;
|
||||
|
||||
// *************************************************************************
|
||||
// DataBase implementation (Private)
|
||||
// *************************************************************************
|
||||
|
||||
/**
|
||||
* Function to unmarshall a Host object
|
||||
* @param num the number of columns read from the DB
|
||||
* @para names the column names
|
||||
* @para vaues the column values
|
||||
* @return 0 on success
|
||||
*/
|
||||
int unmarshall(int num, char **names, char ** values);
|
||||
|
||||
/**
|
||||
* Bootstraps the database table(s) associated to the Host
|
||||
*/
|
||||
static void bootstrap(SqliteDB * db)
|
||||
{
|
||||
db->exec(Host::db_bootstrap);
|
||||
|
||||
db->exec(HostTemplate::db_bootstrap);
|
||||
|
||||
db->exec(HostShare::db_bootstrap);
|
||||
};
|
||||
|
||||
protected:
|
||||
|
||||
// *************************************************************************
|
||||
// Constructor
|
||||
// *************************************************************************
|
||||
|
||||
Host(int id=-1,
|
||||
string _hostname="",
|
||||
string _im_mad_name="",
|
||||
string _vmm_mad_name="",
|
||||
string _tm_mad_name="",
|
||||
bool _managed=true);
|
||||
|
||||
virtual ~Host();
|
||||
|
||||
// *************************************************************************
|
||||
// DataBase implementation
|
||||
// *************************************************************************
|
||||
|
||||
enum ColNames
|
||||
{
|
||||
HID = 0,
|
||||
HOST_NAME = 1,
|
||||
STATE = 2,
|
||||
IM_MAD = 3,
|
||||
VM_MAD = 4,
|
||||
TM_MAD = 5,
|
||||
LAST_MON_TIME = 6,
|
||||
MANAGED = 7,
|
||||
LIMIT = 8
|
||||
};
|
||||
|
||||
static const char * db_names;
|
||||
|
||||
static const char * db_bootstrap;
|
||||
|
||||
static const char * table;
|
||||
|
||||
/**
|
||||
* Reads the Host (identified with its OID=HID) from the database.
|
||||
* @param db pointer to the db
|
||||
* @return 0 on success
|
||||
*/
|
||||
virtual int select(SqliteDB *db);
|
||||
|
||||
/**
|
||||
* Writes the Host and its associated HostShares in the database.
|
||||
* @param db pointer to the db
|
||||
* @return 0 on success
|
||||
*/
|
||||
virtual int insert(SqliteDB *db);
|
||||
|
||||
/**
|
||||
* Writes/updates the Hosts data fields in the database.
|
||||
* @param db pointer to the db
|
||||
* @return 0 on success
|
||||
*/
|
||||
virtual int update(SqliteDB *db);
|
||||
|
||||
/**
|
||||
* Drops host from the database
|
||||
* @param db pointer to the db
|
||||
* @return 0 on success
|
||||
*/
|
||||
virtual int drop(SqliteDB *db);
|
||||
};
|
||||
|
||||
#endif /*HOST_H_*/
|
118
include/HostPool.h
Normal file
118
include/HostPool.h
Normal file
@ -0,0 +1,118 @@
|
||||
/* -------------------------------------------------------------------------- */
|
||||
/* Copyright 2002-2008, Distributed Systems Architecture Group, Universidad */
|
||||
/* Complutense de Madrid (dsa-research.org) */
|
||||
/* */
|
||||
/* Licensed under the Apache License, Version 2.0 (the "License"); you may */
|
||||
/* not use this file except in compliance with the License. You may obtain */
|
||||
/* a copy of the License at */
|
||||
/* */
|
||||
/* http://www.apache.org/licenses/LICENSE-2.0 */
|
||||
/* */
|
||||
/* Unless required by applicable law or agreed to in writing, software */
|
||||
/* distributed under the License is distributed on an "AS IS" BASIS, */
|
||||
/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. */
|
||||
/* See the License for the specific language governing permissions and */
|
||||
/* limitations under the License. */
|
||||
/* -------------------------------------------------------------------------- */
|
||||
|
||||
#ifndef HOST_POOL_H_
|
||||
#define HOST_POOL_H_
|
||||
|
||||
#include "PoolSQL.h"
|
||||
#include "Host.h"
|
||||
|
||||
#include <time.h>
|
||||
#include <sstream>
|
||||
|
||||
#include <iostream>
|
||||
|
||||
#include <vector>
|
||||
|
||||
using namespace std;
|
||||
|
||||
/**
|
||||
* The Host Pool class. ...
|
||||
*/
|
||||
class HostPool : public PoolSQL
|
||||
{
|
||||
public:
|
||||
|
||||
HostPool(SqliteDB * db):PoolSQL(db,Host::table){};
|
||||
|
||||
~HostPool(){};
|
||||
|
||||
/**
|
||||
* Function to allocate a new Host object
|
||||
* @param oid the id assigned to the Host
|
||||
* @return 0 on success
|
||||
*/
|
||||
int allocate (
|
||||
int * oid,
|
||||
string hostname,
|
||||
string im_mad_name,
|
||||
string vmm_mad_name,
|
||||
string tm_mad_name,
|
||||
bool managed = true);
|
||||
|
||||
/**
|
||||
* Function to get a Host from the pool, if the object is not in memory
|
||||
* it is loaded from the DB
|
||||
* @param oid Host unique id
|
||||
* @param lock locks the Host mutex
|
||||
* @return a pointer to the Host, 0 if the Host could not be loaded
|
||||
*/
|
||||
Host * get(
|
||||
int oid,
|
||||
bool lock)
|
||||
{
|
||||
return static_cast<Host *>(PoolSQL::get(oid,lock));
|
||||
};
|
||||
|
||||
/** Update a particular Host
|
||||
* @param host pointer to Host
|
||||
* @return 0 on success
|
||||
*/
|
||||
int update(Host * host)
|
||||
{
|
||||
return host->update(db);
|
||||
};
|
||||
|
||||
|
||||
/** Drops a host from the cache & DB, the host mutex MUST BE locked
|
||||
* @param host pointer to Host
|
||||
*/
|
||||
int drop(Host * host)
|
||||
{
|
||||
remove(static_cast<PoolObjectSQL *>(host));
|
||||
|
||||
return host->drop(db);
|
||||
};
|
||||
|
||||
/**
|
||||
* Bootstraps the database table(s) associated to the Host pool
|
||||
*/
|
||||
void bootstrap()
|
||||
{
|
||||
Host::bootstrap(db);
|
||||
};
|
||||
|
||||
/**
|
||||
* Get the 10 least monitored hosts
|
||||
* param discovered hosts map to store the retrieved hosts hids and hostnames are
|
||||
* return int 0 if success
|
||||
*/
|
||||
int discover(map<int, string> * discovered_hosts);
|
||||
|
||||
private:
|
||||
/**
|
||||
* Factory method to produce Host objects
|
||||
* @return a pointer to the new Host
|
||||
*/
|
||||
PoolObjectSQL * create()
|
||||
{
|
||||
return new Host;
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
#endif /*HOST_POOL_H_*/
|
235
include/HostShare.h
Normal file
235
include/HostShare.h
Normal file
@ -0,0 +1,235 @@
|
||||
/* -------------------------------------------------------------------------- */
|
||||
/* Copyright 2002-2008, Distributed Systems Architecture Group, Universidad */
|
||||
/* Complutense de Madrid (dsa-research.org) */
|
||||
/* */
|
||||
/* Licensed under the Apache License, Version 2.0 (the "License"); you may */
|
||||
/* not use this file except in compliance with the License. You may obtain */
|
||||
/* a copy of the License at */
|
||||
/* */
|
||||
/* http://www.apache.org/licenses/LICENSE-2.0 */
|
||||
/* */
|
||||
/* Unless required by applicable law or agreed to in writing, software */
|
||||
/* distributed under the License is distributed on an "AS IS" BASIS, */
|
||||
/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. */
|
||||
/* See the License for the specific language governing permissions and */
|
||||
/* limitations under the License. */
|
||||
/* -------------------------------------------------------------------------- */
|
||||
|
||||
#ifndef HOST_SHARE_H_
|
||||
#define HOST_SHARE_H_
|
||||
|
||||
#include "SqliteDB.h"
|
||||
#include "ObjectSQL.h"
|
||||
#include <time.h>
|
||||
|
||||
using namespace std;
|
||||
|
||||
extern "C" int host_share_select_cb (void * _host_share, int num,char ** values, char ** names);
|
||||
|
||||
/* -------------------------------------------------------------------------- */
|
||||
/* -------------------------------------------------------------------------- */
|
||||
|
||||
/**
|
||||
* The HostShare class. It represents a logical partition of a host...
|
||||
*/
|
||||
class HostShare : public ObjectSQL
|
||||
{
|
||||
public:
|
||||
|
||||
HostShare(
|
||||
int _hsid=-1,
|
||||
int _max_disk=0,
|
||||
int _max_mem=0,
|
||||
int _max_cpu=0);
|
||||
|
||||
~HostShare(){};
|
||||
|
||||
/**
|
||||
* Gets the HostShare identifier
|
||||
* @return HSID HostShare identifier
|
||||
*/
|
||||
int get_hsid() const
|
||||
{
|
||||
return hsid;
|
||||
};
|
||||
|
||||
/**
|
||||
* Add a new VM to this share
|
||||
* @param cpu requested by the VM
|
||||
* @param mem requested by the VM
|
||||
* @param disk requested by the VM
|
||||
*/
|
||||
void add(int cpu, int mem, int disk)
|
||||
{
|
||||
cpu_usage += cpu;
|
||||
mem_usage += mem;
|
||||
disk_usage += disk;
|
||||
|
||||
running_vms++;
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete a VM from this share
|
||||
* @param cpu requested by the VM
|
||||
* @param mem requested by the VM
|
||||
* @param disk requested by the VM
|
||||
*/
|
||||
void del(int cpu, int mem, int disk)
|
||||
{
|
||||
cpu_usage -= cpu;
|
||||
mem_usage -= mem;
|
||||
disk_usage -= disk;
|
||||
|
||||
running_vms--;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if this share can host a VM.
|
||||
* @param cpu requested by the VM
|
||||
* @param mem requested by the VM
|
||||
* @param disk requested by the VM
|
||||
*
|
||||
* @return true if the share can host the VM or it is the only one
|
||||
* configured
|
||||
*/
|
||||
bool test(int cpu, int mem, int disk) const
|
||||
{
|
||||
return (((max_cpu - cpu_usage ) >= cpu) &&
|
||||
((max_mem - mem_usage ) >= mem) &&
|
||||
((max_disk - disk_usage) >= disk));
|
||||
}
|
||||
|
||||
/**
|
||||
* Function to write a HostShare to an output stream
|
||||
*/
|
||||
friend ostream& operator<<(ostream& os, HostShare& hs);
|
||||
|
||||
private:
|
||||
/**
|
||||
* HostShare identifier
|
||||
*/
|
||||
int hsid;
|
||||
|
||||
/**
|
||||
* HostShare's Endpoint
|
||||
*/
|
||||
string endpoint;
|
||||
|
||||
/**
|
||||
* HostShare disk usage (in Kb)
|
||||
*/
|
||||
int disk_usage;
|
||||
|
||||
/**
|
||||
* HostShare memory usage (in Kb)
|
||||
*/
|
||||
int mem_usage;
|
||||
|
||||
/**
|
||||
* HostShare cpu usage (in percentage)
|
||||
*/
|
||||
int cpu_usage;
|
||||
|
||||
/**
|
||||
* HostShare disk share (in GB), 0 means that the share will use all the
|
||||
* avialable disk in the host
|
||||
*/
|
||||
int max_disk;
|
||||
|
||||
/**
|
||||
* HostShare memory share (in MB), 0 means that the share will use all the
|
||||
* avialable disk in the host
|
||||
*/
|
||||
int max_mem;
|
||||
|
||||
/**
|
||||
* HostShare cpu usage (in percentage), 0 means that the share will use all
|
||||
* the avialable disk in the host
|
||||
*/
|
||||
int max_cpu;
|
||||
|
||||
/**
|
||||
* Number of running Virtual Machines in this HostShare
|
||||
*/
|
||||
int running_vms;
|
||||
|
||||
// ----------------------------------------
|
||||
// Friends
|
||||
// ----------------------------------------
|
||||
|
||||
friend class Host;
|
||||
|
||||
friend int host_share_select_cb (
|
||||
void * _hostshare,
|
||||
int num,
|
||||
char ** values,
|
||||
char ** names);
|
||||
|
||||
// ----------------------------------------
|
||||
// DataBase implementation variables
|
||||
// ----------------------------------------
|
||||
|
||||
enum ColNames
|
||||
{
|
||||
HSID = 0,
|
||||
ENDPOINT = 1,
|
||||
DISK_USAGE = 2,
|
||||
MEM_USAGE = 3,
|
||||
CPU_USAGE = 4,
|
||||
MAX_DISK = 5,
|
||||
MAX_MEMORY = 6,
|
||||
MAX_CPU = 7,
|
||||
RUNNING_VMS = 8,
|
||||
LIMIT = 9
|
||||
};
|
||||
|
||||
static const char * table;
|
||||
|
||||
static const char * db_names;
|
||||
|
||||
static const char * db_bootstrap;
|
||||
|
||||
// ----------------------------------------
|
||||
// Database methods
|
||||
// ----------------------------------------
|
||||
|
||||
/**
|
||||
* Reads the HostShare (identified with its HSID) from the database.
|
||||
* @param db pointer to the db
|
||||
* @return 0 on success
|
||||
*/
|
||||
int select(SqliteDB * db);
|
||||
|
||||
/**
|
||||
* Writes the HostShare in the database.
|
||||
* @param db pointer to the db
|
||||
* @return 0 on success
|
||||
*/
|
||||
int insert(SqliteDB * db);
|
||||
|
||||
/**
|
||||
* Writes/updates the HostShare data fields in the database.
|
||||
* @param db pointer to the db
|
||||
* @return 0 on success
|
||||
*/
|
||||
int update(SqliteDB * db);
|
||||
|
||||
/**
|
||||
* Drops hostshare from the database
|
||||
* @param db pointer to the db
|
||||
* @return 0 on success
|
||||
*/
|
||||
int drop(SqliteDB * db);
|
||||
|
||||
/**
|
||||
* Function to unmarshall a HostShare object
|
||||
* @param num the number of columns read from the DB
|
||||
* @para names the column names
|
||||
* @para vaues the column values
|
||||
* @return 0 on success
|
||||
*/
|
||||
int unmarshall(int num, char **names, char ** values);
|
||||
};
|
||||
|
||||
|
||||
#endif /*HOST_SHARE_H_*/
|
46
include/HostTemplate.h
Normal file
46
include/HostTemplate.h
Normal file
@ -0,0 +1,46 @@
|
||||
/* -------------------------------------------------------------------------- */
|
||||
/* Copyright 2002-2008, Distributed Systems Architecture Group, Universidad */
|
||||
/* Complutense de Madrid (dsa-research.org) */
|
||||
/* */
|
||||
/* Licensed under the Apache License, Version 2.0 (the "License"); you may */
|
||||
/* not use this file except in compliance with the License. You may obtain */
|
||||
/* a copy of the License at */
|
||||
/* */
|
||||
/* http://www.apache.org/licenses/LICENSE-2.0 */
|
||||
/* */
|
||||
/* Unless required by applicable law or agreed to in writing, software */
|
||||
/* distributed under the License is distributed on an "AS IS" BASIS, */
|
||||
/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. */
|
||||
/* See the License for the specific language governing permissions and */
|
||||
/* limitations under the License. */
|
||||
/* -------------------------------------------------------------------------- */
|
||||
|
||||
#ifndef HOST_TEMPLATE_H_
|
||||
#define HOST_TEMPLATE_H_
|
||||
|
||||
#include "TemplateSQL.h"
|
||||
|
||||
using namespace std;
|
||||
|
||||
/**
|
||||
* Host Template class, it represents the attributes of a Host
|
||||
*/
|
||||
class HostTemplate : public TemplateSQL
|
||||
{
|
||||
public:
|
||||
HostTemplate(int tid = -1):TemplateSQL(table,tid,true){};
|
||||
|
||||
~HostTemplate(){};
|
||||
|
||||
private:
|
||||
friend class Host;
|
||||
|
||||
static const char * table;
|
||||
|
||||
static const char * db_bootstrap;
|
||||
};
|
||||
|
||||
/* -------------------------------------------------------------------------- */
|
||||
/* -------------------------------------------------------------------------- */
|
||||
|
||||
#endif /*HOST_TEMPLATE_H_*/
|
142
include/InformationManager.h
Normal file
142
include/InformationManager.h
Normal file
@ -0,0 +1,142 @@
|
||||
/* -------------------------------------------------------------------------- */
|
||||
/* Copyright 2002-2008, Distributed Systems Architecture Group, Universidad */
|
||||
/* Complutense de Madrid (dsa-research.org) */
|
||||
/* */
|
||||
/* Licensed under the Apache License, Version 2.0 (the "License"); you may */
|
||||
/* not use this file except in compliance with the License. You may obtain */
|
||||
/* a copy of the License at */
|
||||
/* */
|
||||
/* http://www.apache.org/licenses/LICENSE-2.0 */
|
||||
/* */
|
||||
/* Unless required by applicable law or agreed to in writing, software */
|
||||
/* distributed under the License is distributed on an "AS IS" BASIS, */
|
||||
/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. */
|
||||
/* See the License for the specific language governing permissions and */
|
||||
/* limitations under the License. */
|
||||
/* -------------------------------------------------------------------------- */
|
||||
|
||||
#ifndef INFORMATION_MANAGER_H_
|
||||
#define INFORMATION_MANAGER_H_
|
||||
|
||||
#include "MadManager.h"
|
||||
#include "ActionManager.h"
|
||||
#include "InformationManagerDriver.h"
|
||||
#include "HostPool.h"
|
||||
|
||||
using namespace std;
|
||||
|
||||
extern "C" void * im_action_loop(void *arg);
|
||||
|
||||
class InformationManager : public MadManager, public ActionListener
|
||||
{
|
||||
public:
|
||||
|
||||
InformationManager(
|
||||
HostPool * _hpool,
|
||||
time_t _timer_period,
|
||||
time_t _monitor_period,
|
||||
vector<const Attribute*>& _mads)
|
||||
:MadManager(_mads),
|
||||
hpool(_hpool),
|
||||
timer_period(_timer_period),
|
||||
monitor_period(_monitor_period)
|
||||
{
|
||||
am.addListener(this);
|
||||
};
|
||||
|
||||
~InformationManager(){};
|
||||
|
||||
/**
|
||||
* This functions starts the associated listener thread, and creates a
|
||||
* new thread for the Information Manager. This thread will wait in
|
||||
* an action loop till it receives ACTION_FINALIZE.
|
||||
* @return 0 on success.
|
||||
*/
|
||||
int start();
|
||||
|
||||
/**
|
||||
* Gets the thread identification.
|
||||
* @return pthread_t for the manager thread (that in the action loop).
|
||||
*/
|
||||
pthread_t get_thread_id() const
|
||||
{
|
||||
return im_thread;
|
||||
};
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
void load_mads(int uid=0);
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
void finalize()
|
||||
{
|
||||
am.trigger(ACTION_FINALIZE,0);
|
||||
};
|
||||
|
||||
private:
|
||||
/**
|
||||
* Thread id for the Information Manager
|
||||
*/
|
||||
pthread_t im_thread;
|
||||
|
||||
/**
|
||||
* Pointer to the Host Pool, to access hosts
|
||||
*/
|
||||
HostPool * hpool;
|
||||
|
||||
/**
|
||||
* Timer period for the Virtual Machine Manager.
|
||||
*/
|
||||
time_t timer_period;
|
||||
|
||||
/**
|
||||
* Host monitoring interval
|
||||
*/
|
||||
time_t monitor_period;
|
||||
|
||||
/**
|
||||
* Action engine for the Manager
|
||||
*/
|
||||
ActionManager am;
|
||||
|
||||
/**
|
||||
* Function to execute the Manager action loop method within a new pthread
|
||||
* (requires C linkage)
|
||||
*/
|
||||
friend void * im_action_loop(void *arg);
|
||||
|
||||
/**
|
||||
* Returns a pointer to a Information Manager MAD. The driver is
|
||||
* searched by its name and owned by gwadmin with uid=0.
|
||||
* @param name of the driver
|
||||
* @return the VM driver owned by uid 0, with attribute "NAME" equal to
|
||||
* name or 0 in not found
|
||||
*/
|
||||
const InformationManagerDriver * get(
|
||||
const string& name)
|
||||
{
|
||||
string _name("NAME");
|
||||
return static_cast<const InformationManagerDriver *>
|
||||
(MadManager::get(0,_name,name));
|
||||
};
|
||||
|
||||
/**
|
||||
* The action function executed when an action is triggered.
|
||||
* @param action the name of the action
|
||||
* @param arg arguments for the action function
|
||||
*/
|
||||
void do_action(
|
||||
const string & action,
|
||||
void * arg);
|
||||
|
||||
/**
|
||||
* This function is executed periodically to monitor Nebula hosts.
|
||||
*/
|
||||
void timer_action();
|
||||
};
|
||||
|
||||
#endif /*VIRTUAL_MACHINE_MANAGER_H*/
|
||||
|
89
include/InformationManagerDriver.h
Normal file
89
include/InformationManagerDriver.h
Normal file
@ -0,0 +1,89 @@
|
||||
/* -------------------------------------------------------------------------- */
|
||||
/* Copyright 2002-2008, Distributed Systems Architecture Group, Universidad */
|
||||
/* Complutense de Madrid (dsa-research.org) */
|
||||
/* */
|
||||
/* Licensed under the Apache License, Version 2.0 (the "License"); you may */
|
||||
/* not use this file except in compliance with the License. You may obtain */
|
||||
/* a copy of the License at */
|
||||
/* */
|
||||
/* http://www.apache.org/licenses/LICENSE-2.0 */
|
||||
/* */
|
||||
/* Unless required by applicable law or agreed to in writing, software */
|
||||
/* distributed under the License is distributed on an "AS IS" BASIS, */
|
||||
/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. */
|
||||
/* See the License for the specific language governing permissions and */
|
||||
/* limitations under the License. */
|
||||
/* -------------------------------------------------------------------------- */
|
||||
|
||||
#ifndef INFORMATION_MANAGER_DRIVER_H_
|
||||
#define INFORMATION_MANAGER_DRIVER_H_
|
||||
|
||||
#include <map>
|
||||
#include <string>
|
||||
#include <sstream>
|
||||
|
||||
#include "Mad.h"
|
||||
#include "HostPool.h"
|
||||
|
||||
|
||||
using namespace std;
|
||||
|
||||
/**
|
||||
* InformationManagerDriver provides a base class to implement IM
|
||||
* Drivers. This class implements the protocol and recover functions
|
||||
* from the Mad interface. This class may be used to further specialize
|
||||
* the IM driver.
|
||||
*/
|
||||
class InformationManagerDriver : public Mad
|
||||
{
|
||||
public:
|
||||
|
||||
InformationManagerDriver(
|
||||
int userid,
|
||||
const map<string,string>& attrs,
|
||||
bool sudo,
|
||||
HostPool * pool):
|
||||
Mad(userid,attrs,sudo),hpool(pool)
|
||||
{}
|
||||
;
|
||||
|
||||
virtual ~InformationManagerDriver()
|
||||
{}
|
||||
;
|
||||
|
||||
/**
|
||||
* Implements the IM driver protocol.
|
||||
* @param message the string read from the driver
|
||||
*/
|
||||
void protocol(
|
||||
string& message);
|
||||
|
||||
/**
|
||||
* TODO: What do we need here? just poll the Hosts to recover..
|
||||
*/
|
||||
void recover();
|
||||
|
||||
/**
|
||||
* Sends a monitor request to the MAD: "MONITOR ID HOSTNAME -"
|
||||
* @param oid the virtual machine id.
|
||||
* @param host the hostname
|
||||
* @param conf the filename of the deployment file
|
||||
*/
|
||||
void monitor (
|
||||
int oid,
|
||||
const string& host) const;
|
||||
|
||||
private:
|
||||
/**
|
||||
* Pointer to the Virtual Machine Pool, to access VMs
|
||||
*/
|
||||
HostPool * hpool;
|
||||
|
||||
friend class InformationManager;
|
||||
|
||||
};
|
||||
|
||||
/* -------------------------------------------------------------------------- */
|
||||
/* -------------------------------------------------------------------------- */
|
||||
|
||||
#endif /*INFORMATION_MANAGER_DRIVER_H_*/
|
169
include/LifeCycleManager.h
Normal file
169
include/LifeCycleManager.h
Normal file
@ -0,0 +1,169 @@
|
||||
/* -------------------------------------------------------------------------- */
|
||||
/* Copyright 2002-2008, Distributed Systems Architecture Group, Universidad */
|
||||
/* Complutense de Madrid (dsa-research.org) */
|
||||
/* */
|
||||
/* Licensed under the Apache License, Version 2.0 (the "License"); you may */
|
||||
/* not use this file except in compliance with the License. You may obtain */
|
||||
/* a copy of the License at */
|
||||
/* */
|
||||
/* http://www.apache.org/licenses/LICENSE-2.0 */
|
||||
/* */
|
||||
/* Unless required by applicable law or agreed to in writing, software */
|
||||
/* distributed under the License is distributed on an "AS IS" BASIS, */
|
||||
/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. */
|
||||
/* See the License for the specific language governing permissions and */
|
||||
/* limitations under the License. */
|
||||
/* -------------------------------------------------------------------------- */
|
||||
|
||||
#ifndef LIFE_CYCLE_MANAGER_H_
|
||||
#define LIFE_CYCLE_MANAGER_H_
|
||||
|
||||
#include "ActionManager.h"
|
||||
#include "VirtualMachinePool.h"
|
||||
|
||||
using namespace std;
|
||||
|
||||
extern "C" void * lcm_action_loop(void *arg);
|
||||
|
||||
/**
|
||||
* The Virtual Machine Life-cycle Manager module. This class is responsible for
|
||||
* managing the life-cycle of a Virtual Machine.
|
||||
*/
|
||||
class LifeCycleManager : public ActionListener
|
||||
{
|
||||
public:
|
||||
|
||||
LifeCycleManager(VirtualMachinePool * pool)
|
||||
{
|
||||
vmpool = pool;
|
||||
|
||||
am.addListener(this);
|
||||
};
|
||||
|
||||
~LifeCycleManager(){};
|
||||
|
||||
enum Actions
|
||||
{
|
||||
SAVE_SUCCESS, /**< Send by the VMM when a save action succeeds */
|
||||
SAVE_FAILURE, /**< Send by the VMM when a save action fails */
|
||||
DEPLOY_SUCCESS, /**< Send by the VMM when a deploy/restore/migrate action succeeds */
|
||||
DEPLOY_FAILURE, /**< Send by the VMM when a deploy/restore/migrate action fails */
|
||||
SHUTDOWN_SUCCESS, /**< Send by the VMM when a shutdown action succeeds*/
|
||||
SHUTDOWN_FAILURE, /**< Send by the VMM when a shutdown action fails */
|
||||
CANCEL_SUCCESS, /**< Send by the VMM when a cancel action succeeds */
|
||||
CANCEL_FAILURE, /**< Send by the VMM when a cancel action fails */
|
||||
PROLOG_SUCCESS, /**< Send by the TM when the prolog phase succeeds */
|
||||
PROLOG_FAILURE, /**< Send by the TM when the prolog phase fails */
|
||||
EPILOG_SUCCESS, /**< Send by the TM when the epilog phase succeeds */
|
||||
EPILOG_FAILURE, /**< Send by the TM when the epilog phase fails */
|
||||
DEPLOY, /**< Send by the DM to deploy a VM on a host */
|
||||
SUSPEND, /**< Send by the DM to suspend an running VM */
|
||||
RESTORE, /**< Send by the DM to restore a suspended VM */
|
||||
STOP, /**< Send by the DM to stop an running VM */
|
||||
CANCEL, /**< Send by the DM to cancel an running VM */
|
||||
MIGRATE, /**< Send by the DM to migrate a VM to other host */
|
||||
LIVE_MIGRATE, /**< Send by the DM to live-migrate a VM */
|
||||
SHUTDOWN, /**< Send by the DM to shutdown an running VM */
|
||||
FINALIZE
|
||||
};
|
||||
|
||||
/**
|
||||
* Triggers specific actions to the Life-cycle Manager. This function
|
||||
* wraps the ActionManager trigger function.
|
||||
* @param action the LCM action
|
||||
* @param vid VM unique id. This is the argument of the passed to the
|
||||
* invoked action.
|
||||
*/
|
||||
void trigger(
|
||||
Actions action,
|
||||
int vid);
|
||||
|
||||
/**
|
||||
* This functions starts a new thread for the Life-cycle Manager. This
|
||||
* thread will wait in an action loop till it receives ACTION_FINALIZE.
|
||||
* @return 0 on success.
|
||||
*/
|
||||
int start();
|
||||
|
||||
/**
|
||||
* Gets the thread identification.
|
||||
* @return pthread_t for the manager thread (that in the action loop).
|
||||
*/
|
||||
pthread_t get_thread_id() const
|
||||
{
|
||||
return lcm_thread;
|
||||
};
|
||||
|
||||
private:
|
||||
/**
|
||||
* Thread id for the Virtual Machine Manager
|
||||
*/
|
||||
pthread_t lcm_thread;
|
||||
|
||||
/**
|
||||
* Pointer to the Virtual Machine Pool, to access VMs
|
||||
*/
|
||||
VirtualMachinePool * vmpool;
|
||||
|
||||
/**
|
||||
* Action engine for the Manager
|
||||
*/
|
||||
ActionManager am;
|
||||
|
||||
/**
|
||||
* Function to execute the Manager action loop method within a new pthread
|
||||
* (requires C linkage)
|
||||
*/
|
||||
friend void * lcm_action_loop(void *arg);
|
||||
|
||||
/**
|
||||
* The action function executed when an action is triggered.
|
||||
* @param action the name of the action
|
||||
* @param arg arguments for the action function
|
||||
*/
|
||||
void do_action(
|
||||
const string & action,
|
||||
void * arg);
|
||||
|
||||
void save_success_action(int vid);
|
||||
|
||||
void save_failure_action(int vid);
|
||||
|
||||
void deploy_success_action(int vid);
|
||||
|
||||
void deploy_failure_action(int vid);
|
||||
|
||||
void shutdown_success_failure_action(int vid);
|
||||
|
||||
void cancel_success_failure_action(int vid);
|
||||
|
||||
void prolog_success_action(int vid);
|
||||
|
||||
void prolog_failure_action(int vid);
|
||||
|
||||
void epilog_success_action(int vid);
|
||||
|
||||
void epilog_failure_action(int vid);
|
||||
|
||||
void deploy_action(int vid);
|
||||
|
||||
void suspend_action(int vid);
|
||||
|
||||
void restore_action(int vid);
|
||||
|
||||
void stop_action(int vid);
|
||||
|
||||
void cancel_action(int vid);
|
||||
|
||||
void checkpoint_action(int vid);
|
||||
|
||||
void migrate_action(int vid);
|
||||
|
||||
void live_migrate_action(int vid);
|
||||
|
||||
void shutdown_action(int vid);
|
||||
|
||||
void timer_action();
|
||||
};
|
||||
|
||||
#endif /*LIFE_CYCLE_MANAGER_H_*/
|
67
include/Log.h
Normal file
67
include/Log.h
Normal file
@ -0,0 +1,67 @@
|
||||
/* -------------------------------------------------------------------------- */
|
||||
/* Copyright 2002-2008, Distributed Systems Architecture Group, Universidad */
|
||||
/* Complutense de Madrid (dsa-research.org) */
|
||||
/* */
|
||||
/* Licensed under the Apache License, Version 2.0 (the "License"); you may */
|
||||
/* not use this file except in compliance with the License. You may obtain */
|
||||
/* a copy of the License at */
|
||||
/* */
|
||||
/* http://www.apache.org/licenses/LICENSE-2.0 */
|
||||
/* */
|
||||
/* Unless required by applicable law or agreed to in writing, software */
|
||||
/* distributed under the License is distributed on an "AS IS" BASIS, */
|
||||
/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. */
|
||||
/* See the License for the specific language governing permissions and */
|
||||
/* limitations under the License. */
|
||||
/* -------------------------------------------------------------------------- */
|
||||
|
||||
#ifndef _LOG_H_
|
||||
#define _LOG_H_
|
||||
|
||||
#include <string>
|
||||
#include <fstream>
|
||||
|
||||
using namespace std;
|
||||
|
||||
class Log
|
||||
{
|
||||
public:
|
||||
enum MessageType {
|
||||
ERROR = 0,
|
||||
WARNING = 1,
|
||||
INFO = 2,
|
||||
DEBUG = 3
|
||||
};
|
||||
|
||||
typedef void (*LogFunction)(
|
||||
const char *,
|
||||
const MessageType,
|
||||
const ostringstream&,
|
||||
const char *);
|
||||
|
||||
Log(const string& file_name,
|
||||
const MessageType level = WARNING,
|
||||
ios_base::openmode mode = ios_base::app);
|
||||
|
||||
~Log();
|
||||
|
||||
void log(
|
||||
const char * module,
|
||||
const MessageType type,
|
||||
const ostringstream& message);
|
||||
|
||||
void log(
|
||||
const char * module,
|
||||
const MessageType type,
|
||||
const char * message);
|
||||
|
||||
private:
|
||||
|
||||
static const char error_names[];
|
||||
|
||||
MessageType log_level;
|
||||
|
||||
ofstream file;
|
||||
};
|
||||
|
||||
#endif /* _LOG_H_ */
|
146
include/Mad.h
Normal file
146
include/Mad.h
Normal file
@ -0,0 +1,146 @@
|
||||
/* -------------------------------------------------------------------------- */
|
||||
/* Copyright 2002-2008, Distributed Systems Architecture Group, Universidad */
|
||||
/* Complutense de Madrid (dsa-research.org) */
|
||||
/* */
|
||||
/* Licensed under the Apache License, Version 2.0 (the "License"); you may */
|
||||
/* not use this file except in compliance with the License. You may obtain */
|
||||
/* a copy of the License at */
|
||||
/* */
|
||||
/* http://www.apache.org/licenses/LICENSE-2.0 */
|
||||
/* */
|
||||
/* Unless required by applicable law or agreed to in writing, software */
|
||||
/* distributed under the License is distributed on an "AS IS" BASIS, */
|
||||
/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. */
|
||||
/* See the License for the specific language governing permissions and */
|
||||
/* limitations under the License. */
|
||||
/* -------------------------------------------------------------------------- */
|
||||
|
||||
#ifndef MAD_H_
|
||||
#define MAD_H_
|
||||
|
||||
#include <pthread.h>
|
||||
#include <sys/types.h>
|
||||
|
||||
#include <map>
|
||||
#include <string>
|
||||
#include <sstream>
|
||||
|
||||
#include <unistd.h>
|
||||
|
||||
using namespace std;
|
||||
|
||||
/**
|
||||
* Base class to build specific middleware access drivers (MAD).
|
||||
* This class provides generic MAD functionality.
|
||||
*/
|
||||
class Mad
|
||||
{
|
||||
protected:
|
||||
/**
|
||||
* The constructor initialize the class members but DOES NOT start the
|
||||
* driver. A subsequent call to the start() method is needed.
|
||||
* @param userid user running this MAD
|
||||
* @param attrs configuration attributes for the driver
|
||||
* @param sudo the driver is started through sudo if true
|
||||
*/
|
||||
Mad(
|
||||
int userid,
|
||||
const map<string,string> &attrs,
|
||||
bool sudo):
|
||||
uid(userid),
|
||||
attributes(attrs),
|
||||
sudo_execution(sudo),
|
||||
pid(-1)
|
||||
{};
|
||||
|
||||
/**
|
||||
* The destructor of the class finalizes the driver process, and all its
|
||||
* associated resources (i.e. pipes)
|
||||
*/
|
||||
virtual ~Mad();
|
||||
|
||||
/**
|
||||
* Send a command to the driver
|
||||
* @param os an output string stream with the message, it must be
|
||||
* terminated with the end of line character.
|
||||
*/
|
||||
void write(
|
||||
ostringstream& os) const
|
||||
{
|
||||
string str;
|
||||
const char * cstr;
|
||||
|
||||
str = os.str();
|
||||
cstr = str.c_str();
|
||||
|
||||
::write(nebula_mad_pipe, cstr, str.size());
|
||||
};
|
||||
|
||||
private:
|
||||
friend class MadManager;
|
||||
|
||||
/**
|
||||
* Communication pipe file descriptor. Represents the MAD to nebula
|
||||
* communication stream (nebula<-mad)
|
||||
*/
|
||||
int mad_nebula_pipe;
|
||||
|
||||
/**
|
||||
* Communication pipe file descriptor. Represents the nebula to MAD
|
||||
* communication stream (nebula->mad)
|
||||
*/
|
||||
int nebula_mad_pipe;
|
||||
|
||||
/**
|
||||
* User running this MAD as defined in the upool DB
|
||||
*/
|
||||
int uid;
|
||||
|
||||
/**
|
||||
* Mad configuration attributes (e.g. executable, attributes...). Attribute
|
||||
* names MUST be lowecase.
|
||||
*/
|
||||
map<string,string> attributes;
|
||||
|
||||
/**
|
||||
* True if the mad is to be executed through sudo, with the identity of the
|
||||
* Mad owner (uid).
|
||||
*/
|
||||
bool sudo_execution;
|
||||
|
||||
/**
|
||||
* Process ID of the running MAD.
|
||||
*/
|
||||
pid_t pid;
|
||||
|
||||
/**
|
||||
* Starts the MAD. This function creates a new process, sets up the
|
||||
* communication pipes and sends the initialization command to the driver.
|
||||
* @return 0 on success
|
||||
*/
|
||||
int start();
|
||||
|
||||
/**
|
||||
* Reloads the driver: sends the finalize command, "waits" for the
|
||||
* driver process and closes the communication pipes. Then the driver is
|
||||
* started again by calling the start() function
|
||||
* @return 0 on success
|
||||
*/
|
||||
int reload();
|
||||
|
||||
/**
|
||||
* Implements the driver specific protocol, this function should trigger
|
||||
* actions on the associated manager.
|
||||
* @param message the string read from the driver
|
||||
*/
|
||||
virtual void protocol(
|
||||
string& message) = 0;
|
||||
|
||||
/**
|
||||
* This function is called whenever the driver crashes. This function
|
||||
* should perform the actions needed to recover the VMs.
|
||||
*/
|
||||
virtual void recover() = 0;
|
||||
};
|
||||
|
||||
#endif /*MAD_H_*/
|
166
include/MadManager.h
Normal file
166
include/MadManager.h
Normal file
@ -0,0 +1,166 @@
|
||||
/* -------------------------------------------------------------------------- */
|
||||
/* Copyright 2002-2008, Distributed Systems Architecture Group, Universidad */
|
||||
/* Complutense de Madrid (dsa-research.org) */
|
||||
/* */
|
||||
/* Licensed under the Apache License, Version 2.0 (the "License"); you may */
|
||||
/* not use this file except in compliance with the License. You may obtain */
|
||||
/* a copy of the License at */
|
||||
/* */
|
||||
/* http://www.apache.org/licenses/LICENSE-2.0 */
|
||||
/* */
|
||||
/* Unless required by applicable law or agreed to in writing, software */
|
||||
/* distributed under the License is distributed on an "AS IS" BASIS, */
|
||||
/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. */
|
||||
/* See the License for the specific language governing permissions and */
|
||||
/* limitations under the License. */
|
||||
/* -------------------------------------------------------------------------- */
|
||||
|
||||
#ifndef MAD_MANAGER_H_
|
||||
#define MAD_MANAGER_H_
|
||||
|
||||
#include <pthread.h>
|
||||
#include <sys/types.h>
|
||||
|
||||
#include <string>
|
||||
#include <vector>
|
||||
#include <sstream>
|
||||
#include <vector>
|
||||
|
||||
#include "Mad.h"
|
||||
#include "Attribute.h"
|
||||
|
||||
using namespace std;
|
||||
|
||||
extern "C" void * mad_manager_listener(void * _mm);
|
||||
|
||||
/**
|
||||
* Provides general functionality for driver management. The MadManager serves
|
||||
* Nebula managers as base clase.
|
||||
*/
|
||||
class MadManager
|
||||
{
|
||||
public:
|
||||
/**
|
||||
* Function to initialize the MAD management system. This function
|
||||
* MUST be called once before using the MadManager class. This function
|
||||
* blocks the SIG_PIPE (broken pipe) signal that may occur when a driver
|
||||
* crashes
|
||||
*/
|
||||
static void mad_manager_system_init();
|
||||
|
||||
/**
|
||||
* Loads Virtual Machine Manager Mads defined in configuration file
|
||||
* @param uid of the user executing the driver. When uid is 0 the nebula
|
||||
* identity will be used. Otherwise the Mad will be loaded through the
|
||||
* sudo application.
|
||||
*/
|
||||
virtual void load_mads(int uid) = 0;
|
||||
|
||||
protected:
|
||||
|
||||
MadManager(vector<const Attribute *>& _mads);
|
||||
|
||||
virtual ~MadManager();
|
||||
|
||||
/**
|
||||
* Vector containing Mad configuration for this Manager, as described in
|
||||
* the nebula location
|
||||
*/
|
||||
vector<const Attribute *> mad_conf;
|
||||
|
||||
/**
|
||||
* This function initialize the communication pipes to register new MADs
|
||||
* in the manager, and starts a listener to wait for driver messages.
|
||||
*/
|
||||
virtual int start();
|
||||
|
||||
|
||||
/**
|
||||
* This function closes the communication pipes, stops the listener thread,
|
||||
* and finalize the associated drivers.
|
||||
*/
|
||||
virtual void stop();
|
||||
|
||||
/**
|
||||
* Get a mad
|
||||
*/
|
||||
virtual const Mad * get(int uid, const string& name, const string& value);
|
||||
|
||||
/**
|
||||
* Register a new mad in the manager. The Mad is previously started, and
|
||||
* then the listener thread is notified through the pipe_w stream. In case
|
||||
* of failure the calling function MUST free the Mad.
|
||||
* @param mad pointer to the mad to be added to the manager.
|
||||
* @return 0 on success.
|
||||
*/
|
||||
int add(Mad *mad);
|
||||
|
||||
private:
|
||||
/**
|
||||
* Function to lock the Manager
|
||||
*/
|
||||
void lock()
|
||||
{
|
||||
pthread_mutex_lock(&mutex);
|
||||
};
|
||||
|
||||
/**
|
||||
* Function to unlock the Manager
|
||||
*/
|
||||
void unlock()
|
||||
{
|
||||
pthread_mutex_unlock(&mutex);
|
||||
};
|
||||
|
||||
/**
|
||||
* Function to execute the listener method within a new pthread (requires
|
||||
* C linkage)
|
||||
*/
|
||||
friend void * mad_manager_listener(void * _mm);
|
||||
|
||||
/**
|
||||
* Synchronization mutex (listener & manager threads)
|
||||
*/
|
||||
pthread_mutex_t mutex;
|
||||
|
||||
/**
|
||||
* Thread id for the listener process
|
||||
*/
|
||||
pthread_t listener_thread;
|
||||
|
||||
/**
|
||||
* Communication pipe (read end) to link the Manager and the listener
|
||||
* thread
|
||||
*/
|
||||
int pipe_r;
|
||||
|
||||
/**
|
||||
* Communication pipe (write end) to link the Manager and the listener
|
||||
* thread
|
||||
*/
|
||||
int pipe_w;
|
||||
|
||||
/**
|
||||
* This vector contains the file descriptors of the driver pipes (to read
|
||||
* Mads responses)
|
||||
*/
|
||||
vector<int> fds;
|
||||
|
||||
/**
|
||||
* The sets of Mads managed by the MadManager
|
||||
*/
|
||||
vector<Mad *> mads;
|
||||
|
||||
/**
|
||||
* Read buffer for the listener. This variable is in the class so it
|
||||
* can be free upon listener thread cancellation.
|
||||
*/
|
||||
ostringstream buffer;
|
||||
|
||||
/**
|
||||
* Listener thread implementation.
|
||||
*/
|
||||
void listener();
|
||||
};
|
||||
|
||||
#endif /*MAD_MANAGER_H_*/
|
248
include/Nebula.h
Normal file
248
include/Nebula.h
Normal file
@ -0,0 +1,248 @@
|
||||
/* -------------------------------------------------------------------------- */
|
||||
/* Copyright 2002-2008, Distributed Systems Architecture Group, Universidad */
|
||||
/* Complutense de Madrid (dsa-research.org) */
|
||||
/* */
|
||||
/* Licensed under the Apache License, Version 2.0 (the "License"); you may */
|
||||
/* not use this file except in compliance with the License. You may obtain */
|
||||
/* a copy of the License at */
|
||||
/* */
|
||||
/* http://www.apache.org/licenses/LICENSE-2.0 */
|
||||
/* */
|
||||
/* Unless required by applicable law or agreed to in writing, software */
|
||||
/* distributed under the License is distributed on an "AS IS" BASIS, */
|
||||
/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. */
|
||||
/* See the License for the specific language governing permissions and */
|
||||
/* limitations under the License. */
|
||||
/* -------------------------------------------------------------------------- */
|
||||
|
||||
#ifndef NEBULA_H_
|
||||
#define NEBULA_H_
|
||||
|
||||
#include <sqlite3.h>
|
||||
|
||||
#include "Log.h"
|
||||
#include "NebulaTemplate.h"
|
||||
|
||||
#include "VirtualMachinePool.h"
|
||||
#include "HostPool.h"
|
||||
|
||||
#include "VirtualMachineManager.h"
|
||||
#include "LifeCycleManager.h"
|
||||
#include "InformationManager.h"
|
||||
#include "TransferManager.h"
|
||||
#include "DispatchManager.h"
|
||||
#include "RequestManager.h"
|
||||
|
||||
class Nebula
|
||||
{
|
||||
public:
|
||||
|
||||
static Nebula& instance()
|
||||
{
|
||||
static Nebula nebulad;
|
||||
|
||||
return nebulad;
|
||||
};
|
||||
|
||||
// ---------------------------------------------------------------
|
||||
// Loggging
|
||||
// ---------------------------------------------------------------
|
||||
|
||||
static void log(
|
||||
const char * module,
|
||||
const Log::MessageType type,
|
||||
const ostringstream& message,
|
||||
const char * filename = 0)
|
||||
{
|
||||
static Log nebula_log(filename,Log::DEBUG,ios_base::trunc);
|
||||
static pthread_mutex_t log_mutex = PTHREAD_MUTEX_INITIALIZER;
|
||||
|
||||
pthread_mutex_lock(&log_mutex);
|
||||
nebula_log.log(module,type,message);
|
||||
pthread_mutex_unlock(&log_mutex);
|
||||
};
|
||||
|
||||
static void log(
|
||||
const char * module,
|
||||
const Log::MessageType type,
|
||||
const char * message,
|
||||
const char * filename = 0)
|
||||
{
|
||||
ostringstream os(message);
|
||||
|
||||
Nebula::log(module,type,os,filename);
|
||||
};
|
||||
|
||||
// --------------------------------------------------------------
|
||||
// Pool Accessors
|
||||
// --------------------------------------------------------------
|
||||
|
||||
VirtualMachinePool * get_vmpool()
|
||||
{
|
||||
return vmpool;
|
||||
};
|
||||
|
||||
HostPool * get_hpool()
|
||||
{
|
||||
return hpool;
|
||||
};
|
||||
|
||||
// --------------------------------------------------------------
|
||||
// Manager Accessors
|
||||
// --------------------------------------------------------------
|
||||
|
||||
VirtualMachineManager * get_vmm()
|
||||
{
|
||||
return vmm;
|
||||
};
|
||||
|
||||
LifeCycleManager * get_lcm()
|
||||
{
|
||||
return lcm;
|
||||
};
|
||||
|
||||
InformationManager * get_im()
|
||||
{
|
||||
return im;
|
||||
};
|
||||
|
||||
TransferManager * get_tm()
|
||||
{
|
||||
return tm;
|
||||
};
|
||||
|
||||
DispatchManager * get_dm()
|
||||
{
|
||||
return dm;
|
||||
};
|
||||
|
||||
// --------------------------------------------------------------
|
||||
// Environment & Configuration
|
||||
// --------------------------------------------------------------
|
||||
|
||||
string& get_nebula_location()
|
||||
{
|
||||
return nebula_location;
|
||||
};
|
||||
|
||||
static string version()
|
||||
{
|
||||
return "ONE0.1";
|
||||
};
|
||||
|
||||
void start();
|
||||
|
||||
void get_configuration_attribute(
|
||||
const char * name,
|
||||
string& value) const
|
||||
{
|
||||
string _name(name);
|
||||
|
||||
nebula_configuration->Template::get(_name,value);
|
||||
};
|
||||
|
||||
private:
|
||||
|
||||
// -----------------------------------------------------------------------
|
||||
//Constructors and = are private to only access the class through instance
|
||||
// -----------------------------------------------------------------------
|
||||
|
||||
Nebula():nebula_configuration(0),db(0),vmpool(0),hpool(0),lcm(0),
|
||||
vmm(0),im(0),tm(0),dm(0),rm(0){};
|
||||
|
||||
~Nebula()
|
||||
{
|
||||
if ( vmpool != 0)
|
||||
{
|
||||
delete vmpool;
|
||||
}
|
||||
|
||||
if ( hpool != 0)
|
||||
{
|
||||
delete hpool;
|
||||
}
|
||||
|
||||
if ( vmm != 0)
|
||||
{
|
||||
delete vmm;
|
||||
}
|
||||
|
||||
if ( lcm != 0)
|
||||
{
|
||||
delete lcm;
|
||||
}
|
||||
|
||||
if ( im != 0)
|
||||
{
|
||||
delete im;
|
||||
}
|
||||
|
||||
if ( tm != 0)
|
||||
{
|
||||
delete tm;
|
||||
}
|
||||
|
||||
if ( dm != 0)
|
||||
{
|
||||
delete dm;
|
||||
}
|
||||
|
||||
if ( rm != 0)
|
||||
{
|
||||
delete rm;
|
||||
}
|
||||
|
||||
if ( nebula_configuration != 0)
|
||||
{
|
||||
delete nebula_configuration;
|
||||
}
|
||||
|
||||
if ( db != 0 )
|
||||
{
|
||||
delete db;
|
||||
}
|
||||
};
|
||||
|
||||
Nebula(Nebula const&){};
|
||||
|
||||
Nebula& operator=(Nebula const&){return *this;};
|
||||
|
||||
// ---------------------------------------------------------------
|
||||
// Environment variables
|
||||
// ---------------------------------------------------------------
|
||||
|
||||
string nebula_location;
|
||||
|
||||
// ---------------------------------------------------------------
|
||||
// Configuration
|
||||
// ---------------------------------------------------------------
|
||||
|
||||
NebulaTemplate * nebula_configuration;
|
||||
|
||||
// ---------------------------------------------------------------
|
||||
// Nebula Pools
|
||||
// ---------------------------------------------------------------
|
||||
|
||||
SqliteDB * db;
|
||||
VirtualMachinePool * vmpool;
|
||||
HostPool * hpool;
|
||||
|
||||
// ---------------------------------------------------------------
|
||||
// Nebula Managers
|
||||
// ---------------------------------------------------------------
|
||||
|
||||
LifeCycleManager * lcm;
|
||||
VirtualMachineManager * vmm;
|
||||
InformationManager * im;
|
||||
TransferManager * tm;
|
||||
DispatchManager * dm;
|
||||
RequestManager * rm;
|
||||
|
||||
// ---------------------------------------------------------------
|
||||
// Implementation functions
|
||||
// ---------------------------------------------------------------
|
||||
|
||||
friend void nebula_signal_handler (int sig);
|
||||
};
|
||||
|
||||
#endif /*NEBULA_H_*/
|
54
include/NebulaTemplate.h
Normal file
54
include/NebulaTemplate.h
Normal file
@ -0,0 +1,54 @@
|
||||
/* -------------------------------------------------------------------------- */
|
||||
/* Copyright 2002-2008, Distributed Systems Architecture Group, Universidad */
|
||||
/* Complutense de Madrid (dsa-research.org) */
|
||||
/* */
|
||||
/* Licensed under the Apache License, Version 2.0 (the "License"); you may */
|
||||
/* not use this file except in compliance with the License. You may obtain */
|
||||
/* a copy of the License at */
|
||||
/* */
|
||||
/* http://www.apache.org/licenses/LICENSE-2.0 */
|
||||
/* */
|
||||
/* Unless required by applicable law or agreed to in writing, software */
|
||||
/* distributed under the License is distributed on an "AS IS" BASIS, */
|
||||
/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. */
|
||||
/* See the License for the specific language governing permissions and */
|
||||
/* limitations under the License. */
|
||||
/* -------------------------------------------------------------------------- */
|
||||
|
||||
#ifndef NEBULA_TEMPLATE_H_
|
||||
#define NEBULA_TEMPLATE_H_
|
||||
|
||||
#include "Template.h"
|
||||
#include <map>
|
||||
|
||||
class NebulaTemplate : public Template
|
||||
{
|
||||
public:
|
||||
|
||||
NebulaTemplate(string& nebula_location);
|
||||
|
||||
~NebulaTemplate(){};
|
||||
|
||||
static const char * conf_name;
|
||||
|
||||
int get(
|
||||
const char * name,
|
||||
vector<const Attribute*>& values) const
|
||||
{
|
||||
string _name(name);
|
||||
|
||||
return Template::get(_name,values);
|
||||
};
|
||||
|
||||
private:
|
||||
friend class Nebula;
|
||||
|
||||
string conf_file;
|
||||
|
||||
map<string, Attribute*> conf_default;
|
||||
|
||||
int load_configuration();
|
||||
};
|
||||
|
||||
|
||||
#endif /*NEBULA_TEMPLATE_H_*/
|
104
include/ObjectSQL.h
Normal file
104
include/ObjectSQL.h
Normal file
@ -0,0 +1,104 @@
|
||||
/* -------------------------------------------------------------------------- */
|
||||
/* Copyright 2002-2008, Distributed Systems Architecture Group, Universidad */
|
||||
/* Complutense de Madrid (dsa-research.org) */
|
||||
/* */
|
||||
/* Licensed under the Apache License, Version 2.0 (the "License"); you may */
|
||||
/* not use this file except in compliance with the License. You may obtain */
|
||||
/* a copy of the License at */
|
||||
/* */
|
||||
/* http://www.apache.org/licenses/LICENSE-2.0 */
|
||||
/* */
|
||||
/* Unless required by applicable law or agreed to in writing, software */
|
||||
/* distributed under the License is distributed on an "AS IS" BASIS, */
|
||||
/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. */
|
||||
/* See the License for the specific language governing permissions and */
|
||||
/* limitations under the License. */
|
||||
/* -------------------------------------------------------------------------- */
|
||||
|
||||
#ifndef OBJECT_SQL_H_
|
||||
#define OBJECT_SQL_H_
|
||||
|
||||
#include "SqliteDB.h"
|
||||
|
||||
using namespace std;
|
||||
|
||||
/**
|
||||
* ObjectSQL class. Provides a SQL backend interface, it should be implemented
|
||||
* by persistent objects.
|
||||
*/
|
||||
|
||||
class ObjectSQL
|
||||
{
|
||||
public:
|
||||
|
||||
ObjectSQL(){};
|
||||
|
||||
virtual ~ObjectSQL(){};
|
||||
|
||||
protected:
|
||||
/**
|
||||
* Gets the value of a column in the pool for a given object
|
||||
* @param db pointer to Database
|
||||
* @param table supporting the object
|
||||
* @param column to be selected
|
||||
* @param where contidtion to select the column
|
||||
* @param value of the column
|
||||
* @return 0 on success
|
||||
*/
|
||||
int select_column(
|
||||
SqliteDB * db,
|
||||
const string& table,
|
||||
const string& column,
|
||||
const string& where,
|
||||
string * value);
|
||||
|
||||
/**
|
||||
* Sets the value of a column in the pool for a given object
|
||||
* @param db pointer to Database
|
||||
* @param table supporting the object
|
||||
* @param column to be selected
|
||||
* @param where contidtion to select the column
|
||||
* @param value of the column
|
||||
* @return 0 on success
|
||||
*/
|
||||
int update_column(
|
||||
SqliteDB * db,
|
||||
const string& table,
|
||||
const string& column,
|
||||
const string& where,
|
||||
const string& value);
|
||||
|
||||
/**
|
||||
* Reads the ObjectSQL (identified with its OID) from the database.
|
||||
* @param db pointer to the db
|
||||
* @return 0 on success
|
||||
*/
|
||||
virtual int select(
|
||||
SqliteDB * db) = 0;
|
||||
|
||||
/**
|
||||
* Writes the ObjectSQL in the database.
|
||||
* @param db pointer to the db
|
||||
* @return 0 on success
|
||||
*/
|
||||
virtual int insert(
|
||||
SqliteDB * db) = 0;
|
||||
|
||||
/**
|
||||
* Updates the ObjectSQL in the database.
|
||||
* @param db pointer to the db
|
||||
* @return 0 on success
|
||||
*/
|
||||
virtual int update(
|
||||
SqliteDB * db) = 0;
|
||||
|
||||
/**
|
||||
* Removes the ObjectSQL from the database.
|
||||
* @param db pointer to the db
|
||||
* @return 0 on success
|
||||
*/
|
||||
virtual int drop(
|
||||
SqliteDB * db) = 0;
|
||||
};
|
||||
|
||||
#endif /*OBJECT_SQL_H_*/
|
93
include/PoolObjectSQL.h
Normal file
93
include/PoolObjectSQL.h
Normal file
@ -0,0 +1,93 @@
|
||||
/* -------------------------------------------------------------------------- */
|
||||
/* Copyright 2002-2008, Distributed Systems Architecture Group, Universidad */
|
||||
/* Complutense de Madrid (dsa-research.org) */
|
||||
/* */
|
||||
/* Licensed under the Apache License, Version 2.0 (the "License"); you may */
|
||||
/* not use this file except in compliance with the License. You may obtain */
|
||||
/* a copy of the License at */
|
||||
/* */
|
||||
/* http://www.apache.org/licenses/LICENSE-2.0 */
|
||||
/* */
|
||||
/* Unless required by applicable law or agreed to in writing, software */
|
||||
/* distributed under the License is distributed on an "AS IS" BASIS, */
|
||||
/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. */
|
||||
/* See the License for the specific language governing permissions and */
|
||||
/* limitations under the License. */
|
||||
/* -------------------------------------------------------------------------- */
|
||||
|
||||
#ifndef POOL_OBJECT_SQL_H_
|
||||
#define POOL_OBJECT_SQL_H_
|
||||
|
||||
#include "SqliteDB.h"
|
||||
#include "ObjectSQL.h"
|
||||
#include <pthread.h>
|
||||
|
||||
using namespace std;
|
||||
|
||||
/**
|
||||
* PoolObject class. Provides a SQL backend interface for Pool components. Each
|
||||
* object is identified with and unique OID
|
||||
*
|
||||
* Note: The PoolObject provides a synchronization mechanism (mutex). This
|
||||
* implementation assumes that the mutex IS LOCKED when the class destructor
|
||||
* is called.
|
||||
*/
|
||||
|
||||
class PoolObjectSQL : public ObjectSQL
|
||||
{
|
||||
public:
|
||||
|
||||
PoolObjectSQL(int id=-1):oid(id)
|
||||
{
|
||||
pthread_mutex_init(&mutex,0);
|
||||
};
|
||||
|
||||
virtual ~PoolObjectSQL()
|
||||
{
|
||||
pthread_mutex_unlock(&mutex);
|
||||
|
||||
pthread_mutex_destroy(&mutex);
|
||||
};
|
||||
|
||||
int get_oid() const
|
||||
{
|
||||
return oid;
|
||||
};
|
||||
|
||||
/**
|
||||
* Function to lock the object
|
||||
*/
|
||||
void lock()
|
||||
{
|
||||
pthread_mutex_lock(&mutex);
|
||||
};
|
||||
|
||||
/**
|
||||
* Function to unlock the object
|
||||
*/
|
||||
void unlock()
|
||||
{
|
||||
pthread_mutex_unlock(&mutex);
|
||||
};
|
||||
|
||||
protected:
|
||||
/**
|
||||
* The object unique ID
|
||||
*/
|
||||
int oid;
|
||||
|
||||
private:
|
||||
|
||||
/**
|
||||
* The PoolSQL, friend to easily manipulate its Objects
|
||||
*/
|
||||
friend class PoolSQL;
|
||||
|
||||
/**
|
||||
* The mutex for the PoolObject. This implementation assumes that the mutex
|
||||
* IS LOCKED when the class destructor is called.
|
||||
*/
|
||||
pthread_mutex_t mutex;
|
||||
};
|
||||
|
||||
#endif /*POOL_OBJECT_SQL_H_*/
|
185
include/PoolSQL.h
Normal file
185
include/PoolSQL.h
Normal file
@ -0,0 +1,185 @@
|
||||
/* -------------------------------------------------------------------------- */
|
||||
/* Copyright 2002-2008, Distributed Systems Architecture Group, Universidad */
|
||||
/* Complutense de Madrid (dsa-research.org) */
|
||||
/* */
|
||||
/* Licensed under the Apache License, Version 2.0 (the "License"); you may */
|
||||
/* not use this file except in compliance with the License. You may obtain */
|
||||
/* a copy of the License at */
|
||||
/* */
|
||||
/* http://www.apache.org/licenses/LICENSE-2.0 */
|
||||
/* */
|
||||
/* Unless required by applicable law or agreed to in writing, software */
|
||||
/* distributed under the License is distributed on an "AS IS" BASIS, */
|
||||
/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. */
|
||||
/* See the License for the specific language governing permissions and */
|
||||
/* limitations under the License. */
|
||||
/* -------------------------------------------------------------------------- */
|
||||
|
||||
#ifndef POOL_SQL_H_
|
||||
#define POOL_SQL_H_
|
||||
|
||||
#include <map>
|
||||
#include <string>
|
||||
#include <queue>
|
||||
|
||||
#include "SqliteDB.h"
|
||||
#include "PoolObjectSQL.h"
|
||||
#include "Log.h"
|
||||
|
||||
using namespace std;
|
||||
|
||||
/**
|
||||
* PoolSQL class. Provides a base class to implement persistent generic pools.
|
||||
* The PoolSQL provides a synchronization mechanism (mutex) to operate in
|
||||
* multithreaded applications. Any modification or access function to the pool
|
||||
* SHOULD block the mutex.
|
||||
*/
|
||||
class PoolSQL
|
||||
{
|
||||
public:
|
||||
|
||||
/**
|
||||
* Initializes the oid counter. This function sets lastOID to
|
||||
* the last used Object identifier by querying the corresponding database
|
||||
* table. This function SHOULD be called before any pool related function.
|
||||
* @param _db a pointer to the database
|
||||
* @param table the name of the table supporting the pool (to set the oid
|
||||
* counter). If null the OID counter is not updated.
|
||||
*/
|
||||
PoolSQL(SqliteDB * _db, const char * table=0);
|
||||
|
||||
virtual ~PoolSQL();
|
||||
|
||||
/**
|
||||
* Allocates a new object, writting it in the pool database. No memory is
|
||||
* allocated for the object.
|
||||
* @param objsql an initialized ObjectSQL
|
||||
* @return the oid assigned to the object or -1 in case of failure
|
||||
*/
|
||||
virtual int allocate(
|
||||
PoolObjectSQL *objsql);
|
||||
|
||||
/**
|
||||
* Gets an object from the pool (if needed the object is loaded from the
|
||||
* database).
|
||||
* @param oid the object unique identifier
|
||||
* @param lock locks the object if true
|
||||
*
|
||||
* @return a pointer to the object, 0 in case of failure
|
||||
*/
|
||||
virtual PoolObjectSQL * get(
|
||||
int oid,
|
||||
bool lock);
|
||||
|
||||
/**
|
||||
* Finds a set objects that satisfies a given condition
|
||||
* @param oids a vector with the oids of the objects.
|
||||
* @param the name of the DB table.
|
||||
* @param where condition in SQL format.
|
||||
*
|
||||
* @return 0 on success
|
||||
*/
|
||||
virtual int search(
|
||||
vector<int>& oids,
|
||||
const char * table,
|
||||
const string& where);
|
||||
|
||||
/**
|
||||
* Updates the object's data in the data base. The object mutex SHOULD be
|
||||
* locked.
|
||||
* @param objsql a pointer to the object
|
||||
*
|
||||
* @return 0 on success.
|
||||
*/
|
||||
virtual int update(
|
||||
PoolObjectSQL * objsql)
|
||||
{
|
||||
return objsql->update(db);
|
||||
};
|
||||
|
||||
/**
|
||||
* Removes an object from the pool cache. The object mutex MUST be locked.
|
||||
* The resources of the object are freed, but its record is kept in the DB.
|
||||
* @param objsql a pointer to the object
|
||||
*/
|
||||
void remove(
|
||||
PoolObjectSQL * objsql);
|
||||
|
||||
/**
|
||||
* Removes all the elements from the pool
|
||||
*/
|
||||
void clean();
|
||||
|
||||
/**
|
||||
* Bootstraps the database table(s) associated to the pool
|
||||
*/
|
||||
virtual void bootstrap() = 0;
|
||||
|
||||
protected:
|
||||
|
||||
/**
|
||||
* Pointer to the database.
|
||||
*/
|
||||
SqliteDB * db;
|
||||
|
||||
/**
|
||||
* Function to lock the pool
|
||||
*/
|
||||
void lock()
|
||||
{
|
||||
pthread_mutex_lock(&mutex);
|
||||
};
|
||||
|
||||
/**
|
||||
* Function to unlock the pool
|
||||
*/
|
||||
void unlock()
|
||||
{
|
||||
pthread_mutex_unlock(&mutex);
|
||||
};
|
||||
|
||||
private:
|
||||
|
||||
pthread_mutex_t mutex;
|
||||
|
||||
/**
|
||||
* Max size for the pool, to control the memory footprint of the pool. This
|
||||
* number MUST be greater than the max. number of objects that are
|
||||
* accessed simultaneously.
|
||||
*/
|
||||
static const unsigned int MAX_POOL_SIZE;
|
||||
|
||||
/**
|
||||
* Last object ID assigned to an object. It must be initialized by the
|
||||
* target pool.
|
||||
*/
|
||||
int lastOID;
|
||||
|
||||
/**
|
||||
* The pool is implemented with a Map, of SQL object pointers, using the
|
||||
* OID as key.
|
||||
*/
|
||||
map<int,PoolObjectSQL *> pool;
|
||||
|
||||
/**
|
||||
* Factory method, must return an ObjectSQL pointer to an allocated pool
|
||||
* specific object.
|
||||
*/
|
||||
virtual PoolObjectSQL * create() = 0;
|
||||
|
||||
/**
|
||||
* OID queue to implement a FIFO-like replacement policy for the pool
|
||||
* cache.
|
||||
*/
|
||||
queue<int> oid_queue;
|
||||
|
||||
/**
|
||||
* FIFO-like replacement policy function. Before removing an object (pop)
|
||||
* from the cache it's lock is checked. The object is removed only if
|
||||
* the associated mutex IS NOT blocked. Otherwise the oid is sent to the
|
||||
* back of the queue.
|
||||
*/
|
||||
void replace();
|
||||
};
|
||||
|
||||
#endif /*POOL_SQL_H_*/
|
363
include/RequestManager.h
Normal file
363
include/RequestManager.h
Normal file
@ -0,0 +1,363 @@
|
||||
/* -------------------------------------------------------------------------- */
|
||||
/* Copyright 2002-2008, Distributed Systems Architecture Group, Universidad */
|
||||
/* Complutense de Madrid (dsa-research.org) */
|
||||
/* */
|
||||
/* Licensed under the Apache License, Version 2.0 (the "License"); you may */
|
||||
/* not use this file except in compliance with the License. You may obtain */
|
||||
/* a copy of the License at */
|
||||
/* */
|
||||
/* http://www.apache.org/licenses/LICENSE-2.0 */
|
||||
/* */
|
||||
/* Unless required by applicable law or agreed to in writing, software */
|
||||
/* distributed under the License is distributed on an "AS IS" BASIS, */
|
||||
/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. */
|
||||
/* See the License for the specific language governing permissions and */
|
||||
/* limitations under the License. */
|
||||
/* -------------------------------------------------------------------------- */
|
||||
|
||||
#ifndef REQUEST_MANAGER_H_
|
||||
#define REQUEST_MANAGER_H_
|
||||
|
||||
#include "ActionManager.h"
|
||||
#include "VirtualMachinePool.h"
|
||||
#include "HostPool.h"
|
||||
|
||||
|
||||
#include <xmlrpc-c/base.hpp>
|
||||
#include <xmlrpc-c/registry.hpp>
|
||||
#include <xmlrpc-c/server_abyss.hpp>
|
||||
|
||||
using namespace std;
|
||||
|
||||
extern "C" void * rm_action_loop(void *arg);
|
||||
|
||||
extern "C" void * rm_xml_server_loop(void *arg);
|
||||
|
||||
class RequestManager : public ActionListener
|
||||
{
|
||||
public:
|
||||
|
||||
RequestManager(
|
||||
VirtualMachinePool * _vmpool,
|
||||
HostPool * _hpool,
|
||||
int _port,
|
||||
string _xml_log_file)
|
||||
:vmpool(_vmpool),hpool(_hpool),port(_port),socket_fd(-1),
|
||||
xml_log_file(_xml_log_file)
|
||||
{
|
||||
am.addListener(this);
|
||||
};
|
||||
|
||||
~RequestManager()
|
||||
{}
|
||||
;
|
||||
|
||||
/**
|
||||
* This functions starts the associated listener thread (XML server), and
|
||||
* creates a new thread for the Request Manager. This thread will wait in
|
||||
* an action loop till it receives ACTION_FINALIZE.
|
||||
* @return 0 on success.
|
||||
*/
|
||||
int start();
|
||||
|
||||
/**
|
||||
* Gets the thread identification.
|
||||
* @return pthread_t for the manager thread (that in the action loop).
|
||||
*/
|
||||
pthread_t get_thread_id() const
|
||||
{
|
||||
return rm_thread;
|
||||
};
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
void finalize()
|
||||
{
|
||||
am.trigger(ACTION_FINALIZE,0);
|
||||
};
|
||||
|
||||
private:
|
||||
|
||||
//--------------------------------------------------------------------------
|
||||
// Friends, thread functions require C-linkage
|
||||
//--------------------------------------------------------------------------
|
||||
|
||||
friend void * rm_xml_server_loop(void *arg);
|
||||
|
||||
friend void * rm_action_loop(void *arg);
|
||||
|
||||
/**
|
||||
* Thread id for the RequestManager
|
||||
*/
|
||||
pthread_t rm_thread;
|
||||
|
||||
/**
|
||||
* Thread id for the XML Server
|
||||
*/
|
||||
pthread_t rm_xml_server_thread;
|
||||
|
||||
/**
|
||||
* Pointer to the Host Pool, to access hosts
|
||||
*/
|
||||
VirtualMachinePool * vmpool;
|
||||
|
||||
/**
|
||||
* Pointer to the Host Pool, to access hosts
|
||||
*/
|
||||
HostPool * hpool;
|
||||
|
||||
/**
|
||||
* Port number where the connection will be open
|
||||
*/
|
||||
int port;
|
||||
|
||||
/*
|
||||
* FD for the XML server socket
|
||||
*/
|
||||
int socket_fd;
|
||||
|
||||
/**
|
||||
* Filename for the log of the xmlrpc server that listens
|
||||
*/
|
||||
string xml_log_file;
|
||||
|
||||
/**
|
||||
* Action engine for the Manager
|
||||
*/
|
||||
ActionManager am;
|
||||
|
||||
/**
|
||||
* To register XML-RPC methods
|
||||
*/
|
||||
xmlrpc_c::registry RequestManagerRegistry;
|
||||
|
||||
/**
|
||||
* The XML-RPC server
|
||||
*/
|
||||
xmlrpc_c::serverAbyss * AbyssServer;
|
||||
|
||||
/**
|
||||
* The action function executed when an action is triggered.
|
||||
* @param action the name of the action
|
||||
* @param arg arguments for the action function
|
||||
*/
|
||||
void do_action(const string & action, void * arg);
|
||||
|
||||
void register_xml_methods();
|
||||
|
||||
int setup_socket();
|
||||
|
||||
// ----------------------------------------------------------------------
|
||||
// XML-RPC Methods
|
||||
// ----------------------------------------------------------------------
|
||||
|
||||
class VirtualMachineAllocate: public xmlrpc_c::method
|
||||
{
|
||||
public:
|
||||
VirtualMachineAllocate()
|
||||
{
|
||||
_signature="A:ss";
|
||||
_help="Allocates a virtual machine in the pool";
|
||||
};
|
||||
|
||||
~VirtualMachineAllocate(){};
|
||||
|
||||
void execute(
|
||||
xmlrpc_c::paramList const& paramList,
|
||||
xmlrpc_c::value * const retval);
|
||||
|
||||
};
|
||||
|
||||
/* ---------------------------------------------------------------------- */
|
||||
|
||||
class VirtualMachineDeploy: public xmlrpc_c::method
|
||||
{
|
||||
public:
|
||||
VirtualMachineDeploy(
|
||||
VirtualMachinePool * _vmpool,
|
||||
HostPool * _hpool):
|
||||
vmpool(_vmpool),
|
||||
hpool(_hpool)
|
||||
{
|
||||
_signature="A:sii";
|
||||
_help="Deploys a virtual machine";
|
||||
};
|
||||
|
||||
~VirtualMachineDeploy(){};
|
||||
|
||||
void execute(
|
||||
xmlrpc_c::paramList const& paramList,
|
||||
xmlrpc_c::value * const retval);
|
||||
|
||||
private:
|
||||
VirtualMachinePool * vmpool;
|
||||
HostPool * hpool;
|
||||
};
|
||||
|
||||
/* ---------------------------------------------------------------------- */
|
||||
|
||||
class VirtualMachineAction: public xmlrpc_c::method
|
||||
{
|
||||
public:
|
||||
VirtualMachineAction()
|
||||
{
|
||||
_signature="A:ssi";
|
||||
_help="Performs an action on a virtual machine";
|
||||
};
|
||||
|
||||
~VirtualMachineAction(){};
|
||||
|
||||
void execute(
|
||||
xmlrpc_c::paramList const& paramList,
|
||||
xmlrpc_c::value * const retval);
|
||||
|
||||
private:
|
||||
VirtualMachinePool * vmpool;
|
||||
HostPool * hpool;
|
||||
};
|
||||
|
||||
/* ---------------------------------------------------------------------- */
|
||||
|
||||
class VirtualMachineMigrate: public xmlrpc_c::method
|
||||
{
|
||||
public:
|
||||
VirtualMachineMigrate(
|
||||
VirtualMachinePool * _vmpool,
|
||||
HostPool * _hpool):
|
||||
vmpool(_vmpool),
|
||||
hpool(_hpool)
|
||||
{
|
||||
_signature="A:siib";
|
||||
_help="Migrates a virtual machine";
|
||||
};
|
||||
|
||||
~VirtualMachineMigrate(){};
|
||||
|
||||
void execute(
|
||||
xmlrpc_c::paramList const& paramList,
|
||||
xmlrpc_c::value * const retval);
|
||||
|
||||
private:
|
||||
VirtualMachinePool * vmpool;
|
||||
HostPool * hpool;
|
||||
};
|
||||
|
||||
/* ---------------------------------------------------------------------- */
|
||||
|
||||
class VirtualMachineInfo: public xmlrpc_c::method
|
||||
{
|
||||
public:
|
||||
VirtualMachineInfo(
|
||||
VirtualMachinePool * _vmpool):
|
||||
vmpool(_vmpool)
|
||||
{
|
||||
_signature="A:si";
|
||||
_help="Returns virtual machine information";
|
||||
};
|
||||
|
||||
~VirtualMachineInfo(){};
|
||||
|
||||
void execute(
|
||||
xmlrpc_c::paramList const& paramList,
|
||||
xmlrpc_c::value * const retval);
|
||||
|
||||
private:
|
||||
VirtualMachinePool * vmpool;
|
||||
};
|
||||
|
||||
/* ---------------------------------------------------------------------- */
|
||||
|
||||
class HostAllocate: public xmlrpc_c::method
|
||||
{
|
||||
public:
|
||||
HostAllocate(HostPool * _hpool):hpool(_hpool)
|
||||
{
|
||||
_signature="A:sssssb";
|
||||
_help="Allocates a host in the pool";
|
||||
};
|
||||
|
||||
~HostAllocate(){};
|
||||
|
||||
void execute(
|
||||
xmlrpc_c::paramList const& paramList,
|
||||
xmlrpc_c::value * const retvalP);
|
||||
|
||||
private:
|
||||
HostPool * hpool;
|
||||
|
||||
};
|
||||
|
||||
/* ---------------------------------------------------------------------- */
|
||||
|
||||
class HostInfo: public xmlrpc_c::method
|
||||
{
|
||||
public:
|
||||
HostInfo(HostPool * _hpool):hpool(_hpool)
|
||||
{
|
||||
_signature="A:si";
|
||||
_help="Returns host information";
|
||||
};
|
||||
|
||||
~HostInfo(){};
|
||||
|
||||
void execute(
|
||||
xmlrpc_c::paramList const& paramList,
|
||||
xmlrpc_c::value * const retvalP);
|
||||
|
||||
private:
|
||||
HostPool * hpool;
|
||||
|
||||
};
|
||||
|
||||
/* ---------------------------------------------------------------------- */
|
||||
|
||||
class HostDelete: public xmlrpc_c::method
|
||||
{
|
||||
public:
|
||||
HostDelete(HostPool * _hpool):hpool(_hpool)
|
||||
{
|
||||
_signature="A:si";
|
||||
_help="Deletes a host from the pool";
|
||||
};
|
||||
|
||||
~HostDelete(){};
|
||||
|
||||
void execute(
|
||||
xmlrpc_c::paramList const& paramList,
|
||||
xmlrpc_c::value * const retvalP);
|
||||
|
||||
private:
|
||||
HostPool * hpool;
|
||||
|
||||
};
|
||||
|
||||
/* ---------------------------------------------------------------------- */
|
||||
|
||||
class HostEnable: public xmlrpc_c::method
|
||||
{
|
||||
public:
|
||||
HostEnable(HostPool * _hpool):hpool(_hpool)
|
||||
{
|
||||
_signature="A:sib";
|
||||
_help="Enables or disables a host";
|
||||
};
|
||||
|
||||
~HostEnable(){};
|
||||
|
||||
void execute(
|
||||
xmlrpc_c::paramList const& paramList,
|
||||
xmlrpc_c::value * const retvalP);
|
||||
|
||||
private:
|
||||
HostPool * hpool;
|
||||
|
||||
};
|
||||
};
|
||||
|
||||
/* -------------------------------------------------------------------------- */
|
||||
/* -------------------------------------------------------------------------- */
|
||||
/* -------------------------------------------------------------------------- */
|
||||
|
||||
#endif
|
||||
|
199
include/Scheduler.h
Normal file
199
include/Scheduler.h
Normal file
@ -0,0 +1,199 @@
|
||||
/* -------------------------------------------------------------------------- */
|
||||
/* Copyright 2002-2008, Distributed Systems Architecture Group, Universidad */
|
||||
/* Complutense de Madrid (dsa-research.org) */
|
||||
/* */
|
||||
/* Licensed under the Apache License, Version 2.0 (the "License"); you may */
|
||||
/* not use this file except in compliance with the License. You may obtain */
|
||||
/* a copy of the License at */
|
||||
/* */
|
||||
/* http://www.apache.org/licenses/LICENSE-2.0 */
|
||||
/* */
|
||||
/* Unless required by applicable law or agreed to in writing, software */
|
||||
/* distributed under the License is distributed on an "AS IS" BASIS, */
|
||||
/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. */
|
||||
/* See the License for the specific language governing permissions and */
|
||||
/* limitations under the License. */
|
||||
/* -------------------------------------------------------------------------- */
|
||||
|
||||
#ifndef SCHEDULER_H_
|
||||
#define SCHEDULER_H_
|
||||
|
||||
#include "Log.h"
|
||||
#include "SchedulerHost.h"
|
||||
#include "SchedulerVirtualMachine.h"
|
||||
#include "SchedulerPolicy.h"
|
||||
#include "ActionManager.h"
|
||||
|
||||
#include <sqlite3.h>
|
||||
#include <sstream>
|
||||
#include <xmlrpc-c/girerr.hpp>
|
||||
#include <xmlrpc-c/base.hpp>
|
||||
#include <xmlrpc-c/client_simple.hpp>
|
||||
|
||||
using namespace std;
|
||||
|
||||
|
||||
/* -------------------------------------------------------------------------- */
|
||||
/* -------------------------------------------------------------------------- */
|
||||
|
||||
extern "C" void * scheduler_action_loop(void *arg);
|
||||
|
||||
/**
|
||||
* The Scheduler class. It represents the scheduler ...
|
||||
*/
|
||||
|
||||
class Scheduler: public ActionListener
|
||||
{
|
||||
public:
|
||||
|
||||
// ---------------------------------------------------------------
|
||||
// Loggging
|
||||
// ---------------------------------------------------------------
|
||||
|
||||
static void log(
|
||||
const char * module,
|
||||
const Log::MessageType type,
|
||||
const ostringstream& message,
|
||||
const char * filename = 0)
|
||||
{
|
||||
static Log scheduler_log(filename,Log::DEBUG);
|
||||
static pthread_mutex_t log_mutex = PTHREAD_MUTEX_INITIALIZER;
|
||||
|
||||
pthread_mutex_lock(&log_mutex);
|
||||
scheduler_log.log(module,type,message);
|
||||
pthread_mutex_unlock(&log_mutex);
|
||||
};
|
||||
|
||||
static void log(
|
||||
const char * module,
|
||||
const Log::MessageType type,
|
||||
const char * message,
|
||||
const char * filename = 0)
|
||||
{
|
||||
ostringstream os(message);
|
||||
|
||||
Scheduler::log(module,type,os,filename);
|
||||
};
|
||||
|
||||
void start();
|
||||
|
||||
virtual void register_policies() = 0;
|
||||
|
||||
protected:
|
||||
|
||||
Scheduler(string& url, time_t _timer)
|
||||
:hpool(0),vmpool(0),db(0),one_url(url),timer(_timer),threshold(0.9)
|
||||
{
|
||||
am.addListener(this);
|
||||
};
|
||||
|
||||
virtual ~Scheduler()
|
||||
{
|
||||
if ( hpool != 0)
|
||||
{
|
||||
delete hpool;
|
||||
}
|
||||
|
||||
if ( vmpool != 0)
|
||||
{
|
||||
delete vmpool;
|
||||
}
|
||||
|
||||
if (db != 0)
|
||||
{
|
||||
delete db;
|
||||
}
|
||||
};
|
||||
|
||||
// ---------------------------------------------------------------
|
||||
// Pools
|
||||
// ---------------------------------------------------------------
|
||||
|
||||
SchedulerHostPool * hpool;
|
||||
SchedulerVirtualMachinePool * vmpool;
|
||||
|
||||
// ---------------------------------------------------------------
|
||||
// Scheduler Policies
|
||||
// ---------------------------------------------------------------
|
||||
|
||||
void add_host_policy(SchedulerHostPolicy *policy)
|
||||
{
|
||||
host_policies.push_back(policy);
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------
|
||||
// Scheduler main methods
|
||||
// ---------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Gets the hosts that match the requirements of the pending VMs, also
|
||||
* the capacity of the host is checked. If there is enough room to host the
|
||||
* VM a share vector is added to the VM.
|
||||
*/
|
||||
virtual void match();
|
||||
|
||||
virtual void dispatch();
|
||||
|
||||
virtual int schedule();
|
||||
|
||||
virtual int set_up_pools();
|
||||
|
||||
private:
|
||||
Scheduler(Scheduler const&){};
|
||||
|
||||
Scheduler& operator=(Scheduler const&){return *this;};
|
||||
|
||||
friend void * scheduler_action_loop(void *arg);
|
||||
|
||||
// ---------------------------------------------------------------
|
||||
// Database
|
||||
// ---------------------------------------------------------------
|
||||
|
||||
SqliteDB * db;
|
||||
|
||||
// ---------------------------------------------------------------
|
||||
// Scheduling Policies
|
||||
// ---------------------------------------------------------------
|
||||
|
||||
vector<SchedulerHostPolicy *> host_policies;
|
||||
|
||||
// ---------------------------------------------------------------
|
||||
// Configuration attributes
|
||||
// ---------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* the URL of the XML-RPC server
|
||||
*/
|
||||
string one_url;
|
||||
|
||||
|
||||
time_t timer;
|
||||
|
||||
/**
|
||||
* Threshold value to round up freecpu
|
||||
*/
|
||||
float threshold;
|
||||
|
||||
// ---------------------------------------------------------------
|
||||
// Timer to periodically schedule and dispatch VMs
|
||||
// ---------------------------------------------------------------
|
||||
|
||||
pthread_t sched_thread;
|
||||
ActionManager am;
|
||||
|
||||
void do_action(const string &name, void *args);
|
||||
|
||||
// ---------------------------------------------------------------
|
||||
// XML_RPC related variables
|
||||
// ---------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* NOTE (from lib doc): "you may not have more than one object of this
|
||||
* class in a program. The code is not re-entrant -- it uses global
|
||||
* variables."
|
||||
*/
|
||||
xmlrpc_c::clientSimple xmlrpc_client;
|
||||
};
|
||||
|
||||
|
||||
#endif /*SCHEDULER_H_*/
|
141
include/SchedulerHost.h
Normal file
141
include/SchedulerHost.h
Normal file
@ -0,0 +1,141 @@
|
||||
/* -------------------------------------------------------------------------- */
|
||||
/* Copyright 2002-2008, Distributed Systems Architecture Group, Universidad */
|
||||
/* Complutense de Madrid (dsa-research.org) */
|
||||
/* */
|
||||
/* Licensed under the Apache License, Version 2.0 (the "License"); you may */
|
||||
/* not use this file except in compliance with the License. You may obtain */
|
||||
/* a copy of the License at */
|
||||
/* */
|
||||
/* http://www.apache.org/licenses/LICENSE-2.0 */
|
||||
/* */
|
||||
/* Unless required by applicable law or agreed to in writing, software */
|
||||
/* distributed under the License is distributed on an "AS IS" BASIS, */
|
||||
/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. */
|
||||
/* See the License for the specific language governing permissions and */
|
||||
/* limitations under the License. */
|
||||
/* -------------------------------------------------------------------------- */
|
||||
|
||||
#ifndef SCHEDULER_HOST_H_
|
||||
#define SCHEDULER_HOST_H_
|
||||
|
||||
#include "Host.h"
|
||||
|
||||
using namespace std;
|
||||
|
||||
|
||||
/* -------------------------------------------------------------------------- */
|
||||
/* -------------------------------------------------------------------------- */
|
||||
|
||||
/**
|
||||
* The SchedulerHost class. It represents the scheduler version of the host,
|
||||
* only read operations to the pool are allowed for the SchedulerHost class
|
||||
*/
|
||||
class SchedulerHost : public Host
|
||||
{
|
||||
|
||||
public:
|
||||
|
||||
SchedulerHost(){};
|
||||
|
||||
~SchedulerHost(){};
|
||||
|
||||
/**
|
||||
* Gets the current host capacity
|
||||
* @param cpu the host free cpu, scaled according to a given threshold
|
||||
* @param memory the host free memory
|
||||
* @param threshold to consider the host totally free
|
||||
*/
|
||||
void get_capacity(int& cpu, int& memory, int threshold);
|
||||
|
||||
private:
|
||||
|
||||
// ----------------------------------------
|
||||
// Friends
|
||||
// ----------------------------------------
|
||||
friend class SchedulerHostPool;
|
||||
|
||||
// ----------------------------------------
|
||||
// SQL functions do not modify the DB!
|
||||
// ----------------------------------------
|
||||
int insert(SqliteDB *db);
|
||||
|
||||
int update(SqliteDB *db);
|
||||
|
||||
int drop(SqliteDB *db);
|
||||
|
||||
};
|
||||
|
||||
/* -------------------------------------------------------------------------- */
|
||||
/* -------------------------------------------------------------------------- */
|
||||
|
||||
/**
|
||||
* The SchedulerHost class. It represents the scheduler version of the host,
|
||||
* read only operation to the pool are allowed for the SchedulerHost class
|
||||
*/
|
||||
class SchedulerHostPool : public PoolSQL
|
||||
{
|
||||
public:
|
||||
|
||||
//--------------------------------------------------------------------------
|
||||
// Constructor
|
||||
//--------------------------------------------------------------------------
|
||||
|
||||
SchedulerHostPool(SqliteDB *db):PoolSQL(db){};
|
||||
|
||||
~SchedulerHostPool(){};
|
||||
|
||||
/**
|
||||
* Implements the Pool interface, just prints an error message. This
|
||||
* class DOES NOT modify the database.
|
||||
*/
|
||||
int allocate(
|
||||
PoolObjectSQL *objsql);
|
||||
|
||||
/**
|
||||
* Gets an ScheulerHost from the pool (if needed the object is loaded from
|
||||
* the database).
|
||||
* @param oid the object unique identifier
|
||||
* @param lock locks the object if true
|
||||
*
|
||||
* @return a pointer to the object, 0 in case of failure
|
||||
*/
|
||||
SchedulerHost * get(
|
||||
int oid,
|
||||
bool lock)
|
||||
{
|
||||
return static_cast<SchedulerHost *>(PoolSQL::get(oid,lock));
|
||||
};
|
||||
|
||||
/**
|
||||
* Set ups the host pool by performing the following actions:
|
||||
* - All the objects stored in the pool are flushed
|
||||
* - The ids of the hosts in the database are loaded
|
||||
* @return 0 on success
|
||||
*/
|
||||
int set_up();
|
||||
|
||||
private:
|
||||
friend class Scheduler;
|
||||
|
||||
/**
|
||||
* Hosts ids
|
||||
*/
|
||||
vector<int> hids;
|
||||
|
||||
/**
|
||||
* Factory method for the PoolSQL class
|
||||
* @return a pointer to a new SchedulerHost object
|
||||
*/
|
||||
PoolObjectSQL * create()
|
||||
{
|
||||
return new SchedulerHost;
|
||||
};
|
||||
|
||||
/**
|
||||
* Bootstrap method from the PoolSQL interface. It just prints
|
||||
* an error message as this class MUST not modify the DB.
|
||||
*/
|
||||
void bootstrap();
|
||||
};
|
||||
|
||||
#endif /*SCHEDULER_HOST_H_*/
|
112
include/SchedulerPolicy.h
Normal file
112
include/SchedulerPolicy.h
Normal file
@ -0,0 +1,112 @@
|
||||
/* -------------------------------------------------------------------------- */
|
||||
/* Copyright 2002-2008, Distributed Systems Architecture Group, Universidad */
|
||||
/* Complutense de Madrid (dsa-research.org) */
|
||||
/* */
|
||||
/* Licensed under the Apache License, Version 2.0 (the "License"); you may */
|
||||
/* not use this file except in compliance with the License. You may obtain */
|
||||
/* a copy of the License at */
|
||||
/* */
|
||||
/* http://www.apache.org/licenses/LICENSE-2.0 */
|
||||
/* */
|
||||
/* Unless required by applicable law or agreed to in writing, software */
|
||||
/* distributed under the License is distributed on an "AS IS" BASIS, */
|
||||
/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. */
|
||||
/* See the License for the specific language governing permissions and */
|
||||
/* limitations under the License. */
|
||||
/* -------------------------------------------------------------------------- */
|
||||
|
||||
#ifndef SCHEDULER_POLICY_H_
|
||||
#define SCHEDULER_POLICY_H_
|
||||
|
||||
#include "SchedulerHost.h"
|
||||
#include "SchedulerVirtualMachine.h"
|
||||
#include <cmath>
|
||||
|
||||
using namespace std;
|
||||
|
||||
class SchedulerHostPolicy
|
||||
{
|
||||
public:
|
||||
|
||||
SchedulerHostPolicy(
|
||||
SchedulerVirtualMachinePool * _vmpool,
|
||||
SchedulerHostPool * _hpool,
|
||||
float w=1.0):
|
||||
vmpool(_vmpool),hpool(_hpool),sw(w){};
|
||||
|
||||
virtual ~SchedulerHostPolicy(){};
|
||||
|
||||
const vector<float>& get(
|
||||
SchedulerVirtualMachine * vm)
|
||||
{
|
||||
priority.clear();
|
||||
|
||||
policy(vm);
|
||||
|
||||
if(priority.empty()!=true)
|
||||
{
|
||||
sw.max = *max_element(
|
||||
priority.begin(),
|
||||
priority.end(),
|
||||
SchedulerHostPolicy::abs_cmp);
|
||||
|
||||
transform(
|
||||
priority.begin(),
|
||||
priority.end(),
|
||||
priority.begin(),
|
||||
sw);
|
||||
}
|
||||
|
||||
return priority;
|
||||
};
|
||||
|
||||
protected:
|
||||
|
||||
vector<float> priority;
|
||||
|
||||
virtual void policy(SchedulerVirtualMachine * vm) = 0;
|
||||
|
||||
SchedulerVirtualMachinePool * vmpool;
|
||||
SchedulerHostPool * hpool;
|
||||
|
||||
private:
|
||||
|
||||
static bool abs_cmp(float fl1, float fl2)
|
||||
{
|
||||
return fabs(fl1)<fabs(fl2);
|
||||
};
|
||||
|
||||
//--------------------------------------------------------------------------
|
||||
class ScaleWeight
|
||||
{
|
||||
public:
|
||||
ScaleWeight(float _weight):weight(_weight){};
|
||||
|
||||
~ScaleWeight(){};
|
||||
|
||||
float operator() (float pr)
|
||||
{
|
||||
if ( max == 0 )
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
return weight * pr / max;
|
||||
}
|
||||
};
|
||||
|
||||
private:
|
||||
friend class SchedulerHostPolicy;
|
||||
|
||||
float weight;
|
||||
float max;
|
||||
};
|
||||
//--------------------------------------------------------------------------
|
||||
|
||||
ScaleWeight sw;
|
||||
};
|
||||
|
||||
/* -------------------------------------------------------------------------- */
|
||||
|
||||
#endif /*SCHEDULER_POLICY_H_*/
|
186
include/SchedulerVirtualMachine.h
Normal file
186
include/SchedulerVirtualMachine.h
Normal file
@ -0,0 +1,186 @@
|
||||
/* -------------------------------------------------------------------------- */
|
||||
/* Copyright 2002-2008, Distributed Systems Architecture Group, Universidad */
|
||||
/* Complutense de Madrid (dsa-research.org) */
|
||||
/* */
|
||||
/* Licensed under the Apache License, Version 2.0 (the "License"); you may */
|
||||
/* not use this file except in compliance with the License. You may obtain */
|
||||
/* a copy of the License at */
|
||||
/* */
|
||||
/* http://www.apache.org/licenses/LICENSE-2.0 */
|
||||
/* */
|
||||
/* Unless required by applicable law or agreed to in writing, software */
|
||||
/* distributed under the License is distributed on an "AS IS" BASIS, */
|
||||
/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. */
|
||||
/* See the License for the specific language governing permissions and */
|
||||
/* limitations under the License. */
|
||||
/* -------------------------------------------------------------------------- */
|
||||
|
||||
#ifndef SCHEDULER_VIRTUAL_MACHINE_H_
|
||||
#define SCHEDULER_VIRTUAL_MACHINE_H_
|
||||
|
||||
#include "VirtualMachine.h"
|
||||
#include "SchedulerHost.h"
|
||||
|
||||
using namespace std;
|
||||
|
||||
|
||||
/* -------------------------------------------------------------------------- */
|
||||
/* -------------------------------------------------------------------------- */
|
||||
|
||||
/**
|
||||
* The SchedulerHost class. It represents the scheduler version of the host,
|
||||
* only read operations to the pool are allowed for the SchedulerHost class
|
||||
*/
|
||||
class SchedulerVirtualMachine : public VirtualMachine
|
||||
{
|
||||
|
||||
public:
|
||||
|
||||
SchedulerVirtualMachine(){};
|
||||
|
||||
~SchedulerVirtualMachine()
|
||||
{
|
||||
vector<SchedulerVirtualMachine::Host *>::iterator jt;
|
||||
|
||||
for (jt=hosts.begin();jt!=hosts.end();jt++)
|
||||
{
|
||||
delete *jt;
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Adds a new share to the map of suitable shares to start this VM
|
||||
* @param hid of the selected host
|
||||
* @param hsid of the selected host share
|
||||
*/
|
||||
void add_host(int hid)
|
||||
{
|
||||
SchedulerVirtualMachine::Host * ss;
|
||||
|
||||
ss = new SchedulerVirtualMachine::Host(hid);
|
||||
|
||||
hosts.push_back(ss);
|
||||
};
|
||||
|
||||
/**
|
||||
* Gets the matching hosts ids
|
||||
* @param mh vector with the hids of the matching hosts
|
||||
*/
|
||||
void get_matching_hosts(vector<int>& mh)
|
||||
{
|
||||
vector<SchedulerVirtualMachine::Host *>::iterator i;
|
||||
|
||||
for(i=hosts.begin();i!=hosts.end();i++)
|
||||
{
|
||||
mh.push_back((*i)->hid);
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Sets the priorities for each matching host
|
||||
*/
|
||||
void set_priorities(vector<float>& total);
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
int get_host(int& hid, SchedulerHostPool * hpool);
|
||||
|
||||
/**
|
||||
* Function to write a Virtual Machine in an output stream
|
||||
*/
|
||||
friend ostream& operator<<(ostream& os, SchedulerVirtualMachine& vm);
|
||||
|
||||
private:
|
||||
|
||||
// -------------------------------------------------------------------------
|
||||
// Friends
|
||||
// -------------------------------------------------------------------------
|
||||
friend class SchedulerVirtualMachinePool;
|
||||
|
||||
//--------------------------------------------------------------------------
|
||||
|
||||
struct Host
|
||||
{
|
||||
int hid;
|
||||
float priority;
|
||||
|
||||
Host(int _hid):
|
||||
hid(_hid),
|
||||
priority(0){};
|
||||
|
||||
~Host(){};
|
||||
|
||||
bool operator<(const Host& b) { //Sort by priority
|
||||
return priority < b.priority;
|
||||
}
|
||||
};
|
||||
|
||||
//--------------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Matching hosts
|
||||
*/
|
||||
vector<SchedulerVirtualMachine::Host *> hosts;
|
||||
|
||||
// -------------------------------------------------------------------------
|
||||
// SQL functions do not modify the DB!
|
||||
// -------------------------------------------------------------------------
|
||||
|
||||
int insert(SqliteDB *db);
|
||||
|
||||
int update(SqliteDB *db);
|
||||
|
||||
int drop(SqliteDB *db);
|
||||
};
|
||||
|
||||
/* -------------------------------------------------------------------------- */
|
||||
/* -------------------------------------------------------------------------- */
|
||||
|
||||
/**
|
||||
* The SchedulerHost class. It represents the scheduler version of the host,
|
||||
* read only operation to the pool are allowed for the SchedulerHost class
|
||||
*/
|
||||
class SchedulerVirtualMachinePool : public PoolSQL
|
||||
{
|
||||
public:
|
||||
|
||||
SchedulerVirtualMachinePool(SqliteDB * db):PoolSQL(db){};
|
||||
|
||||
~SchedulerVirtualMachinePool(){};
|
||||
|
||||
int allocate(
|
||||
PoolObjectSQL *objsql);
|
||||
|
||||
SchedulerVirtualMachine * get(
|
||||
int oid,
|
||||
bool lock)
|
||||
{
|
||||
return static_cast<SchedulerVirtualMachine *>(PoolSQL::get(oid,lock));
|
||||
};
|
||||
|
||||
/**
|
||||
* Set ups the VM pool by performing the following actions:
|
||||
* - All the objects stored in the pool are flushed
|
||||
* - The ids of the pendings VMs in the database are loaded
|
||||
* @return 0 on success
|
||||
*/
|
||||
int set_up();
|
||||
|
||||
private:
|
||||
friend class Scheduler;
|
||||
|
||||
/**
|
||||
* The ids of the pending VMs
|
||||
*/
|
||||
vector<int> pending_vms;
|
||||
|
||||
PoolObjectSQL * create()
|
||||
{
|
||||
return new SchedulerVirtualMachine;
|
||||
};
|
||||
|
||||
void bootstrap();
|
||||
};
|
||||
|
||||
#endif /*SCHEDULER_VIRTUAL_MACHINE_H_*/
|
185
include/SqliteDB.h
Normal file
185
include/SqliteDB.h
Normal file
@ -0,0 +1,185 @@
|
||||
/* -------------------------------------------------------------------------- */
|
||||
/* Copyright 2002-2008, Distributed Systems Architecture Group, Universidad */
|
||||
/* Complutense de Madrid (dsa-research.org) */
|
||||
/* */
|
||||
/* Licensed under the Apache License, Version 2.0 (the "License"); you may */
|
||||
/* not use this file except in compliance with the License. You may obtain */
|
||||
/* a copy of the License at */
|
||||
/* */
|
||||
/* http://www.apache.org/licenses/LICENSE-2.0 */
|
||||
/* */
|
||||
/* Unless required by applicable law or agreed to in writing, software */
|
||||
/* distributed under the License is distributed on an "AS IS" BASIS, */
|
||||
/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. */
|
||||
/* See the License for the specific language governing permissions and */
|
||||
/* limitations under the License. */
|
||||
/* -------------------------------------------------------------------------- */
|
||||
|
||||
#ifndef SQLITE_DB_H_
|
||||
#define SQLITE_DB_H_
|
||||
|
||||
#include <string>
|
||||
#include <sstream>
|
||||
#include <stdexcept>
|
||||
#include <sqlite3.h>
|
||||
|
||||
#include <sys/time.h>
|
||||
#include <sys/types.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include "Log.h"
|
||||
|
||||
using namespace std;
|
||||
|
||||
/**
|
||||
* SqliteDB class. Provides a wrapper to the sqlite3 database interface. It also
|
||||
* provides "global" synchronization mechanism to use it in a multithread
|
||||
* environment.
|
||||
*/
|
||||
class SqliteDB
|
||||
{
|
||||
public:
|
||||
|
||||
SqliteDB(
|
||||
string& db_name,
|
||||
Log::LogFunction _log = 0
|
||||
):log(_log)
|
||||
{
|
||||
int rc;
|
||||
|
||||
pthread_mutex_init(&mutex,0);
|
||||
|
||||
rc = sqlite3_open(db_name.c_str(), &db);
|
||||
|
||||
if ( rc != SQLITE_OK )
|
||||
{
|
||||
throw runtime_error("Could not open database.");
|
||||
}
|
||||
};
|
||||
|
||||
~SqliteDB()
|
||||
{
|
||||
pthread_mutex_destroy(&mutex);
|
||||
|
||||
sqlite3_close(db);
|
||||
};
|
||||
|
||||
/**
|
||||
* Wraps the sqlite3_exec function call, and locks the DB mutex.
|
||||
* @param sql_cmd the SQL command
|
||||
* @param callbak function to execute on each data returned, watch the
|
||||
* mutex you block in the callback.
|
||||
* @param arg to pass to the callback function
|
||||
* @return 0 on success
|
||||
*/
|
||||
int exec(
|
||||
ostringstream& sql_cmd,
|
||||
int (*callback)(void*,int,char**,char**)=0,
|
||||
void * arg=0)
|
||||
{
|
||||
int rc;
|
||||
|
||||
const char * c_str;
|
||||
string str;
|
||||
|
||||
int counter = 0;
|
||||
|
||||
char * err_msg;
|
||||
char ** ptr = (log==0) ? 0 : &err_msg;
|
||||
|
||||
str = sql_cmd.str();
|
||||
c_str = str.c_str();
|
||||
|
||||
lock();
|
||||
|
||||
do
|
||||
{
|
||||
counter++;
|
||||
|
||||
rc = sqlite3_exec(db, c_str, callback, arg, ptr);
|
||||
|
||||
if (rc == SQLITE_BUSY || rc == SQLITE_IOERR_BLOCKED)
|
||||
{
|
||||
struct timeval timeout;
|
||||
fd_set zero;
|
||||
|
||||
FD_ZERO(&zero);
|
||||
timeout.tv_sec = 0;
|
||||
timeout.tv_usec = 100000;
|
||||
|
||||
select(0, &zero, &zero, &zero, &timeout);
|
||||
}
|
||||
|
||||
}while( (rc == SQLITE_BUSY || rc == SQLITE_IOERR_BLOCKED) &&
|
||||
(counter < 10));
|
||||
|
||||
unlock();
|
||||
|
||||
if (rc != SQLITE_OK)
|
||||
{
|
||||
if ((log != 0) && (err_msg != 0))
|
||||
{
|
||||
ostringstream oss;
|
||||
|
||||
oss << "SQL command was: " << c_str << ", error: " << err_msg;
|
||||
log("ONE",Log::ERROR,oss,0);
|
||||
|
||||
sqlite3_free(err_msg);
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
};
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
int exec(
|
||||
const char * sql_c_str,
|
||||
int (*callback)(void*,int,char**,char**)=0,
|
||||
void * arg=0)
|
||||
{
|
||||
string sql_str = sql_c_str;
|
||||
ostringstream sql_cmd;
|
||||
|
||||
sql_cmd.str(sql_str);
|
||||
|
||||
return exec(sql_cmd,callback,arg);
|
||||
};
|
||||
|
||||
private:
|
||||
/**
|
||||
* Fine-grain mutex for DB access
|
||||
*/
|
||||
pthread_mutex_t mutex;
|
||||
|
||||
/**
|
||||
* Pointer to the database.
|
||||
*/
|
||||
sqlite3 * db;
|
||||
|
||||
/**
|
||||
* Log facility
|
||||
*/
|
||||
Log::LogFunction log;
|
||||
|
||||
/**
|
||||
* Function to lock the DB
|
||||
*/
|
||||
void lock()
|
||||
{
|
||||
pthread_mutex_lock(&mutex);
|
||||
};
|
||||
|
||||
/**
|
||||
* Function to unlock the DB
|
||||
*/
|
||||
void unlock()
|
||||
{
|
||||
pthread_mutex_unlock(&mutex);
|
||||
};
|
||||
};
|
||||
|
||||
#endif /*SQLITE_DB_H_*/
|
139
include/Template.h
Normal file
139
include/Template.h
Normal file
@ -0,0 +1,139 @@
|
||||
/* -------------------------------------------------------------------------- */
|
||||
/* Copyright 2002-2008, Distributed Systems Architecture Group, Universidad */
|
||||
/* Complutense de Madrid (dsa-research.org) */
|
||||
/* */
|
||||
/* Licensed under the Apache License, Version 2.0 (the "License"); you may */
|
||||
/* not use this file except in compliance with the License. You may obtain */
|
||||
/* a copy of the License at */
|
||||
/* */
|
||||
/* http://www.apache.org/licenses/LICENSE-2.0 */
|
||||
/* */
|
||||
/* Unless required by applicable law or agreed to in writing, software */
|
||||
/* distributed under the License is distributed on an "AS IS" BASIS, */
|
||||
/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. */
|
||||
/* See the License for the specific language governing permissions and */
|
||||
/* limitations under the License. */
|
||||
/* -------------------------------------------------------------------------- */
|
||||
|
||||
#ifndef TEMPLATE_H_
|
||||
#define TEMPLATE_H_
|
||||
|
||||
#include <iostream>
|
||||
#include <map>
|
||||
#include <vector>
|
||||
|
||||
#include "Attribute.h"
|
||||
|
||||
using namespace std;
|
||||
|
||||
/**
|
||||
* Base class for file templates. A template is a file (or a tring for the
|
||||
* matter of fact) containing a set of attribute definitions of the form:
|
||||
* NAME = VALUE
|
||||
* where NAME is a string representing the name of the attribute, and VALUE can
|
||||
* be a single string or a vector value (array of string pairs). The file can
|
||||
* contain several attributes with the same name.
|
||||
*/
|
||||
class Template
|
||||
{
|
||||
public:
|
||||
|
||||
Template(bool _replace_mode=false):replace_mode(_replace_mode){};
|
||||
|
||||
/**
|
||||
* The class destructor frees all the attributes conforming the template
|
||||
*/
|
||||
virtual ~Template();
|
||||
|
||||
/**
|
||||
* Parse a string representing the template, each attribute is inserted
|
||||
* in the template class.
|
||||
* @param parse_str string with template attributes
|
||||
* @param error_msg error string, must be freed by the calling funtion.
|
||||
* This string is null if no error occurred.
|
||||
* @return 0 on success.
|
||||
*/
|
||||
int parse(const string &parse_str, char **error_msg);
|
||||
|
||||
/**
|
||||
* Parse a template file.
|
||||
* @param filename of the template file
|
||||
* @param error_msg error string, must be freed by the calling funtion.
|
||||
* This string is null if no error occurred.
|
||||
* @return 0 on success.
|
||||
*/
|
||||
int parse(const char * filename, char **error_msg);
|
||||
|
||||
/**
|
||||
* Marshall a template. This function generates a single string with the
|
||||
* template attributes ("VAR=VAL<delim>...").
|
||||
* @param str_tempalte string that hold the template
|
||||
* @param delim to separate attributes
|
||||
*/
|
||||
void marshall(string &str, const char delim='\n');
|
||||
|
||||
/**
|
||||
* Sets a new attribute, the attribute MUST BE ALLOCATED IN THE HEAP, and
|
||||
* will be freed when the template destructor is called.
|
||||
* @param attr pointer to the attribute
|
||||
*/
|
||||
virtual void set(Attribute * attr)
|
||||
{
|
||||
if ( replace_mode == true )
|
||||
{
|
||||
attributes.erase(attr->name());
|
||||
}
|
||||
|
||||
attributes.insert(make_pair(attr->name(),attr));
|
||||
};
|
||||
|
||||
/**
|
||||
* Gets all the attributes with the given name.
|
||||
* @param name the attribute name.
|
||||
* @returns the number of elements in the vector
|
||||
*/
|
||||
virtual int get(
|
||||
string& name,
|
||||
vector<const Attribute*>& values) const;
|
||||
|
||||
/**
|
||||
* Gets the value of a Single attributes (string) with the given name.
|
||||
* @param name the attribute name.
|
||||
* @param value the attribute value, a string, "" if the attribute is not
|
||||
* defined or not Single
|
||||
*/
|
||||
virtual void get(
|
||||
string& name,
|
||||
string& value) const;
|
||||
|
||||
/**
|
||||
* Gets the value of a Single attributes (int) with the given name.
|
||||
* @param name the attribute name.
|
||||
* @param value the attribute value, an int, 0 if the attribute is not
|
||||
* defined or not Single
|
||||
*/
|
||||
virtual void get(
|
||||
string& name,
|
||||
int& value) const;
|
||||
|
||||
friend ostream& operator<<(ostream& os, Template& t);
|
||||
|
||||
protected:
|
||||
/**
|
||||
* The template attributes
|
||||
*/
|
||||
multimap<string,Attribute *> attributes;
|
||||
|
||||
private:
|
||||
|
||||
bool replace_mode;
|
||||
/**
|
||||
* Mutex to perform just one flex-bison parsing at a time
|
||||
*/
|
||||
static pthread_mutex_t mutex;
|
||||
};
|
||||
|
||||
/* -------------------------------------------------------------------------- */
|
||||
/* -------------------------------------------------------------------------- */
|
||||
|
||||
#endif /*TEMPLATE_H_*/
|
92
include/TemplateSQL.h
Normal file
92
include/TemplateSQL.h
Normal file
@ -0,0 +1,92 @@
|
||||
/* -------------------------------------------------------------------------- */
|
||||
/* Copyright 2002-2008, Distributed Systems Architecture Group, Universidad */
|
||||
/* Complutense de Madrid (dsa-research.org) */
|
||||
/* */
|
||||
/* Licensed under the Apache License, Version 2.0 (the "License"); you may */
|
||||
/* not use this file except in compliance with the License. You may obtain */
|
||||
/* a copy of the License at */
|
||||
/* */
|
||||
/* http://www.apache.org/licenses/LICENSE-2.0 */
|
||||
/* */
|
||||
/* Unless required by applicable law or agreed to in writing, software */
|
||||
/* distributed under the License is distributed on an "AS IS" BASIS, */
|
||||
/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. */
|
||||
/* See the License for the specific language governing permissions and */
|
||||
/* limitations under the License. */
|
||||
/* -------------------------------------------------------------------------- */
|
||||
|
||||
#ifndef TEMPLATE_SQL_H_
|
||||
#define TEMPLATE_SQL_H_
|
||||
|
||||
#include <iostream>
|
||||
#include <map>
|
||||
#include <vector>
|
||||
|
||||
#include "Template.h"
|
||||
#include "SqliteDB.h"
|
||||
#include "ObjectSQL.h"
|
||||
|
||||
using namespace std;
|
||||
|
||||
/**
|
||||
* SQL Template class, it provides DB support for template objects
|
||||
*/
|
||||
class TemplateSQL : public Template, public ObjectSQL
|
||||
{
|
||||
public:
|
||||
TemplateSQL(
|
||||
const char * _table,
|
||||
int template_id = -1,
|
||||
bool replace = false):
|
||||
Template(replace),table(_table),id(template_id)
|
||||
{};
|
||||
|
||||
virtual ~TemplateSQL(){};
|
||||
|
||||
protected:
|
||||
|
||||
//Database implementation variables
|
||||
|
||||
const char * table;
|
||||
|
||||
static const char * db_names;
|
||||
|
||||
//Template attributes
|
||||
|
||||
/**
|
||||
* Template unique identification.
|
||||
*/
|
||||
int id;
|
||||
|
||||
/**
|
||||
* Writes the template in the DB
|
||||
* @param db pointer to the database.
|
||||
* @return 0 on success.
|
||||
*/
|
||||
int insert(SqliteDB * db);
|
||||
|
||||
/**
|
||||
* Updates the template in the DB
|
||||
* @param db pointer to the database.
|
||||
* @return 0 on success.
|
||||
*/
|
||||
int update(SqliteDB *db);
|
||||
|
||||
/**
|
||||
* Reads the template (identified by its id) from the DB
|
||||
* @param db pointer to the database.
|
||||
* @return 0 on success.
|
||||
*/
|
||||
int select(SqliteDB *db);
|
||||
|
||||
/**
|
||||
* Removes the template from the DB
|
||||
* @param db pointer to the database.
|
||||
*/
|
||||
int drop(SqliteDB *db);
|
||||
};
|
||||
|
||||
/* -------------------------------------------------------------------------- */
|
||||
/* -------------------------------------------------------------------------- */
|
||||
|
||||
#endif /*TEMPLATE_SQL_H_*/
|
137
include/TransferManager.h
Normal file
137
include/TransferManager.h
Normal file
@ -0,0 +1,137 @@
|
||||
/* -------------------------------------------------------------------------- */
|
||||
/* Copyright 2002-2008, Distributed Systems Architecture Group, Universidad */
|
||||
/* Complutense de Madrid (dsa-research.org) */
|
||||
/* */
|
||||
/* Licensed under the Apache License, Version 2.0 (the "License"); you may */
|
||||
/* not use this file except in compliance with the License. You may obtain */
|
||||
/* a copy of the License at */
|
||||
/* */
|
||||
/* http://www.apache.org/licenses/LICENSE-2.0 */
|
||||
/* */
|
||||
/* Unless required by applicable law or agreed to in writing, software */
|
||||
/* distributed under the License is distributed on an "AS IS" BASIS, */
|
||||
/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. */
|
||||
/* See the License for the specific language governing permissions and */
|
||||
/* limitations under the License. */
|
||||
/* -------------------------------------------------------------------------- */
|
||||
|
||||
#ifndef TRANSFER_MANAGER_H_
|
||||
#define TRANSFER_MANAGER_H_
|
||||
|
||||
#include "MadManager.h"
|
||||
#include "ActionManager.h"
|
||||
#include "VirtualMachinePool.h"
|
||||
#include "LifeCycleManager.h"
|
||||
|
||||
using namespace std;
|
||||
|
||||
extern "C" void * tm_action_loop(void *arg);
|
||||
|
||||
class TransferManager : public MadManager, public ActionListener
|
||||
{
|
||||
public:
|
||||
|
||||
TransferManager(
|
||||
VirtualMachinePool * pool,
|
||||
vector<const Attribute*>& _mads):
|
||||
MadManager(_mads),
|
||||
hpool(pool)
|
||||
{
|
||||
am.addListener(this);
|
||||
};
|
||||
|
||||
~TransferManager(){};
|
||||
|
||||
enum Actions
|
||||
{
|
||||
PROLOG,
|
||||
EPILOG,
|
||||
CHECKPOINT,
|
||||
FINALIZE
|
||||
};
|
||||
|
||||
/**
|
||||
* Triggers specific actions to the Information Manager. This function
|
||||
* wraps the ActionManager trigger function.
|
||||
* @param action the IM action
|
||||
* @param vid VM unique id. This is the argument of the passed to the
|
||||
* invoked action.
|
||||
*/
|
||||
void trigger(
|
||||
Actions action,
|
||||
int vid);
|
||||
|
||||
/**
|
||||
* This functions starts the associated listener thread, and creates a
|
||||
* new thread for the Information Manager. This thread will wait in
|
||||
* an action loop till it receives ACTION_FINALIZE.
|
||||
* @return 0 on success.
|
||||
*/
|
||||
int start();
|
||||
|
||||
/**
|
||||
* Loads Virtual Machine Manager Mads defined in configuration file
|
||||
* @param uid of the user executing the driver. When uid is 0 the nebula
|
||||
* identity will be used. Otherwise the Mad will be loaded through the
|
||||
* sudo application.
|
||||
*/
|
||||
void load_mads(int uid){};
|
||||
|
||||
/**
|
||||
* Gets the thread identification.
|
||||
* @return pthread_t for the manager thread (that in the action loop).
|
||||
*/
|
||||
pthread_t get_thread_id() const
|
||||
{
|
||||
return tm_thread;
|
||||
};
|
||||
|
||||
private:
|
||||
/**
|
||||
* Thread id for the Transfer Manager
|
||||
*/
|
||||
pthread_t tm_thread;
|
||||
|
||||
/**
|
||||
* Pointer to the VM Pool, to access virtual machines
|
||||
*/
|
||||
VirtualMachinePool * hpool;
|
||||
|
||||
/**
|
||||
* Action engine for the Manager
|
||||
*/
|
||||
ActionManager am;
|
||||
|
||||
/**
|
||||
* Function to execute the Manager action loop method within a new pthread
|
||||
* (requires C linkage)
|
||||
*/
|
||||
friend void * tm_action_loop(void *arg);
|
||||
|
||||
/**
|
||||
* The action function executed when an action is triggered.
|
||||
* @param action the name of the action
|
||||
* @param arg arguments for the action function
|
||||
*/
|
||||
void do_action(
|
||||
const string & action,
|
||||
void * arg);
|
||||
|
||||
/**
|
||||
* This function starts the prolog sequence
|
||||
*/
|
||||
void prolog_action(int vid);
|
||||
|
||||
/**
|
||||
* This function starts the epilog sequence
|
||||
*/
|
||||
void epilog_action(int vid);
|
||||
|
||||
/**
|
||||
* This function starts the epilog sequence
|
||||
*/
|
||||
void checkpoint_action(int vid);
|
||||
};
|
||||
|
||||
#endif /*TRANSFER_MANAGER_H*/
|
||||
|
775
include/VirtualMachine.h
Normal file
775
include/VirtualMachine.h
Normal file
@ -0,0 +1,775 @@
|
||||
/* -------------------------------------------------------------------------- */
|
||||
/* Copyright 2002-2008, Distributed Systems Architecture Group, Universidad */
|
||||
/* Complutense de Madrid (dsa-research.org) */
|
||||
/* */
|
||||
/* Licensed under the Apache License, Version 2.0 (the "License"); you may */
|
||||
/* not use this file except in compliance with the License. You may obtain */
|
||||
/* a copy of the License at */
|
||||
/* */
|
||||
/* http://www.apache.org/licenses/LICENSE-2.0 */
|
||||
/* */
|
||||
/* Unless required by applicable law or agreed to in writing, software */
|
||||
/* distributed under the License is distributed on an "AS IS" BASIS, */
|
||||
/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. */
|
||||
/* See the License for the specific language governing permissions and */
|
||||
/* limitations under the License. */
|
||||
/* -------------------------------------------------------------------------- */
|
||||
|
||||
#ifndef VIRTUAL_MACHINE_H_
|
||||
#define VIRTUAL_MACHINE_H_
|
||||
|
||||
#include "VirtualMachineTemplate.h"
|
||||
#include "PoolSQL.h"
|
||||
#include "History.h"
|
||||
#include "Log.h"
|
||||
|
||||
#include <time.h>
|
||||
#include <sstream>
|
||||
|
||||
using namespace std;
|
||||
|
||||
extern "C" int vm_select_cb (void * _vm, int num,char ** values, char ** names);
|
||||
|
||||
/* -------------------------------------------------------------------------- */
|
||||
/* -------------------------------------------------------------------------- */
|
||||
|
||||
/**
|
||||
* The Virtual Machine class. It represents a VM...
|
||||
*/
|
||||
class VirtualMachine : public PoolObjectSQL
|
||||
{
|
||||
public:
|
||||
// ------------------------------------------------------------------------
|
||||
// VM States
|
||||
// ------------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Global Virtual Machine state
|
||||
*/
|
||||
enum VmState
|
||||
{
|
||||
INIT = 0,
|
||||
PENDING = 1,
|
||||
HOLD = 2,
|
||||
ACTIVE = 3,
|
||||
STOPPED = 4,
|
||||
SUSPENDED = 5,
|
||||
DONE = 6,
|
||||
FAILED = 7
|
||||
};
|
||||
|
||||
/**
|
||||
* Virtual Machine state associated to the Life-cycle Manager
|
||||
*/
|
||||
enum LcmState
|
||||
{
|
||||
LCM_INIT = 0,
|
||||
PROLOG = 1,
|
||||
BOOT = 2,
|
||||
RUNNING = 3,
|
||||
MIGRATE = 4,
|
||||
SAVE_STOP = 5,
|
||||
SAVE_SUSPEND = 6,
|
||||
SAVE_MIGRATE = 7,
|
||||
PROLOG_MIGRATE = 8,
|
||||
EPILOG_STOP = 9,
|
||||
EPILOG = 10,
|
||||
SHUTDOWN = 11,
|
||||
CANCEL = 12
|
||||
};
|
||||
|
||||
// ------------------------------------------------------------------------
|
||||
// Log & Print
|
||||
// ------------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* writes a log message in vm.log. The class lock should be locked and
|
||||
* the VM MUST BE obtained through the VirtualMachinePool get() method.
|
||||
*/
|
||||
void log(
|
||||
const char * module,
|
||||
const Log::MessageType type,
|
||||
const ostringstream& message) const
|
||||
{
|
||||
if (_log != 0)
|
||||
{
|
||||
_log->log(module,type,message);
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* writes a log message in vm.log. The class lock should be locked and
|
||||
* the VM MUST BE obtained through the VirtualMachinePool get() method.
|
||||
*/
|
||||
void log(
|
||||
const char * module,
|
||||
const Log::MessageType type,
|
||||
const char * message) const
|
||||
{
|
||||
if (_log != 0)
|
||||
{
|
||||
_log->log(module,type,message);
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Function to write a Virtual Machine in an output stream
|
||||
*/
|
||||
friend ostream& operator<<(ostream& os, VirtualMachine& vm);
|
||||
|
||||
// ------------------------------------------------------------------------
|
||||
// Dynamic Info
|
||||
// ------------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Updates VM dynamic information (id).
|
||||
* @param _deploy_id the VMM driver specific id
|
||||
*/
|
||||
void update_info(
|
||||
const string& _deploy_id)
|
||||
{
|
||||
deploy_id = _deploy_id;
|
||||
};
|
||||
|
||||
/**
|
||||
* Updates VM dynamic information (usage counters).
|
||||
* @param _memory used by the VM (total)
|
||||
* @param _cpu used by the VM (rate)
|
||||
* @param _net_tx transmitted bytes (total)
|
||||
* @param _net_tx received bytes (total)
|
||||
*/
|
||||
void update_info(
|
||||
const int _memory,
|
||||
const int _cpu,
|
||||
const int _net_tx,
|
||||
const int _net_rx)
|
||||
{
|
||||
if (_memory != -1)
|
||||
{
|
||||
memory = _memory;
|
||||
}
|
||||
|
||||
if (_cpu != -1)
|
||||
{
|
||||
cpu = _cpu;
|
||||
}
|
||||
|
||||
if (_net_tx != -1)
|
||||
{
|
||||
net_tx = _net_tx;
|
||||
}
|
||||
|
||||
if (_net_rx != -1)
|
||||
{
|
||||
net_rx = _net_rx;
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Returns the deployment ID
|
||||
* @return the VMM driver specific ID
|
||||
*/
|
||||
const string& get_deploy_id() const
|
||||
{
|
||||
return deploy_id;
|
||||
};
|
||||
|
||||
/**
|
||||
* Sets the VM exit time
|
||||
* @param _et VM exit time (when it arraived DONE/FAILED states)
|
||||
*/
|
||||
void set_exit_time(time_t et)
|
||||
{
|
||||
etime = et;
|
||||
};
|
||||
|
||||
// ------------------------------------------------------------------------
|
||||
// History
|
||||
// ------------------------------------------------------------------------
|
||||
/**
|
||||
* Adds a new history record an writes it in the database
|
||||
*/
|
||||
void add_history(
|
||||
int hid,
|
||||
string& hostname,
|
||||
string& vm_dir,
|
||||
string& vmm_mad,
|
||||
string& tm_mad);
|
||||
|
||||
/**
|
||||
* Checks if the VM has a defined history record. This function
|
||||
* MUST be called before using any history related function.
|
||||
* @return true if the VM has a record
|
||||
*/
|
||||
bool hasHistory() const
|
||||
{
|
||||
return (history!=0);
|
||||
};
|
||||
|
||||
/**
|
||||
* Returns the VMM driver name for the current host. The hasHistory()
|
||||
* function MUST be called before this one.
|
||||
* @return the VMM mad name
|
||||
*/
|
||||
const string & get_vmm_mad() const
|
||||
{
|
||||
return history->vmm_mad_name;
|
||||
};
|
||||
|
||||
/**
|
||||
* Returns the TM driver name for the current host. The hasHistory()
|
||||
* function MUST be called before this one.
|
||||
* @return the TM mad name
|
||||
*/
|
||||
const string & get_tm_mad() const
|
||||
{
|
||||
return history->tm_mad_name;
|
||||
};
|
||||
|
||||
/**
|
||||
* Returns the deployment filename (local path). The hasHistory()
|
||||
* function MUST be called before this one.
|
||||
* @return the deployment filename
|
||||
*/
|
||||
const string & get_deployment_lfile() const
|
||||
{
|
||||
return history->deployment_lfile;
|
||||
};
|
||||
|
||||
/**
|
||||
* Returns the deployment filename for the current host (remote). The
|
||||
* hasHistory() function MUST be called before this one.
|
||||
* @return the deployment filename
|
||||
*/
|
||||
const string & get_deployment_rfile() const
|
||||
{
|
||||
return history->deployment_rfile;
|
||||
};
|
||||
|
||||
/**
|
||||
* Returns the checkpoint filename for the current host (remote). The
|
||||
* hasHistory() function MUST be called before this one.
|
||||
* @return the checkpoint filename
|
||||
*/
|
||||
const string & get_checkpoint_file() const
|
||||
{
|
||||
return history->checkpoint_file;
|
||||
};
|
||||
|
||||
/**
|
||||
* Returns the hostname for the current host. The hasHistory()
|
||||
* function MUST be called before this one.
|
||||
* @return the hostname
|
||||
*/
|
||||
const string & get_hostname() const
|
||||
{
|
||||
return history->hostname;
|
||||
};
|
||||
|
||||
/**
|
||||
* Get host id where the VM is or is going to execute. The hasHistory()
|
||||
* function MUST be called before this one.
|
||||
*/
|
||||
int get_hid()
|
||||
{
|
||||
return history->hid;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets start time of a VM.
|
||||
* @param _stime time when the VM started
|
||||
*/
|
||||
void set_stime(time_t _stime)
|
||||
{
|
||||
history->stime=_stime;
|
||||
};
|
||||
|
||||
/**
|
||||
* Sets end time of a VM.
|
||||
* @param _etime time when the VM finished
|
||||
*/
|
||||
void set_etime(time_t _etime)
|
||||
{
|
||||
history->etime=_etime;
|
||||
};
|
||||
|
||||
/**
|
||||
* Sets start time of VM prolog.
|
||||
* @param _stime time when the prolog started
|
||||
*/
|
||||
void set_prolog_stime(time_t _stime)
|
||||
{
|
||||
history->prolog_stime=_stime;
|
||||
};
|
||||
|
||||
/**
|
||||
* Sets end time of VM prolog.
|
||||
* @param _etime time when the prolog finished
|
||||
*/
|
||||
void set_prolog_etime(time_t _etime)
|
||||
{
|
||||
history->prolog_etime=_etime;
|
||||
};
|
||||
|
||||
/**
|
||||
* Sets start time of VM running state.
|
||||
* @param _stime time when the running state started
|
||||
*/
|
||||
void set_running_stime(time_t _stime)
|
||||
{
|
||||
history->running_stime=_stime;
|
||||
};
|
||||
|
||||
/**
|
||||
* Sets end time of VM running state.
|
||||
* @param _etime time when the running state finished
|
||||
*/
|
||||
void set_running_etime(time_t _etime)
|
||||
{
|
||||
history->running_etime=_etime;
|
||||
};
|
||||
|
||||
/**
|
||||
* Sets start time of VM epilog.
|
||||
* @param _stime time when the epilog started
|
||||
*/
|
||||
void set_epilog_stime(time_t _stime)
|
||||
{
|
||||
history->running_stime=_stime;
|
||||
};
|
||||
|
||||
/**
|
||||
* Sets end time of VM epilog.
|
||||
* @param _etime time when the epilog finished
|
||||
*/
|
||||
void set_epilog_etime(time_t _etime)
|
||||
{
|
||||
history->running_etime=_etime;
|
||||
};
|
||||
|
||||
/**
|
||||
* Sets the reason that originated the VM migration
|
||||
* @param _reason migration reason to leave this host
|
||||
*/
|
||||
void set_reason(History::MigrationReason _reason)
|
||||
{
|
||||
history->reason=_reason;
|
||||
};
|
||||
|
||||
// ------------------------------------------------------------------------
|
||||
// Template
|
||||
// ------------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Gets the values of a template attribute
|
||||
* @param name of the attribute
|
||||
* @param values of the attribute
|
||||
* @return the number of values
|
||||
*/
|
||||
int get_template_attribute(
|
||||
string& name,
|
||||
vector<const Attribute*>& values) const
|
||||
{
|
||||
return vm_template.get(name,values);
|
||||
};
|
||||
|
||||
/**
|
||||
* Gets the values of a template attribute
|
||||
* @param name of the attribute
|
||||
* @param values of the attribute
|
||||
* @return the number of values
|
||||
*/
|
||||
int get_template_attribute(
|
||||
const char *name,
|
||||
vector<const Attribute*>& values) const
|
||||
{
|
||||
string str=name;
|
||||
return vm_template.get(str,values);
|
||||
};
|
||||
|
||||
/**
|
||||
* Gets a string based VM attribute (single)
|
||||
* @param name of the attribute
|
||||
* @param value of the attribute (a string), will be "" if not defined or
|
||||
* not a single attribute
|
||||
*/
|
||||
void get_template_attribute(
|
||||
const char * name,
|
||||
string& value) const
|
||||
{
|
||||
string str=name;
|
||||
vm_template.get(str,value);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets an int based VM attribute (single)
|
||||
* @param name of the attribute
|
||||
* @param value of the attribute (an int), will be 0 if not defined or
|
||||
* not a single attribute
|
||||
*/
|
||||
void get_template_attribute(
|
||||
const char * name,
|
||||
int& value) const
|
||||
{
|
||||
string str=name;
|
||||
vm_template.get(str,value);
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------------------
|
||||
// States
|
||||
// ------------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Returns the VM state (Dispatch Manager)
|
||||
* @return the VM state
|
||||
*/
|
||||
VmState get_state() const
|
||||
{
|
||||
return state;
|
||||
};
|
||||
|
||||
/**
|
||||
* Returns the VM state (life-cycle Manager)
|
||||
* @return the VM state
|
||||
*/
|
||||
LcmState get_lcm_state() const
|
||||
{
|
||||
return lcm_state;
|
||||
};
|
||||
|
||||
/**
|
||||
* Sets VM state
|
||||
* @param s state
|
||||
*/
|
||||
void set_state(VmState s)
|
||||
{
|
||||
state = s;
|
||||
};
|
||||
|
||||
/**
|
||||
* Sets VM LCM state
|
||||
* @param s state
|
||||
*/
|
||||
void set_state(LcmState s)
|
||||
{
|
||||
lcm_state = s;
|
||||
};
|
||||
|
||||
/**
|
||||
* Gets the user id of the owner of this VM
|
||||
* @return the VM uid
|
||||
*/
|
||||
int get_uid() const
|
||||
{
|
||||
return uid;
|
||||
};
|
||||
|
||||
// ------------------------------------------------------------------------
|
||||
// Timers
|
||||
// ------------------------------------------------------------------------
|
||||
/**
|
||||
* Gets time from last information polling.
|
||||
* @return time of last poll (epoch) or 0 if never polled
|
||||
*/
|
||||
time_t get_last_poll() const
|
||||
{
|
||||
return last_poll;
|
||||
};
|
||||
|
||||
/**
|
||||
* Sets time of last information polling.
|
||||
* @param poll time in epoch, normally time(0)
|
||||
*/
|
||||
void set_last_poll(time_t poll)
|
||||
{
|
||||
last_poll = poll;
|
||||
};
|
||||
|
||||
/**
|
||||
* Get the VM physical requirements for the host.
|
||||
* @param cpu
|
||||
* @param memory
|
||||
* @param disk
|
||||
*/
|
||||
void get_requirements (int& cpu, int& memory, int& disk);
|
||||
|
||||
private:
|
||||
|
||||
// -------------------------------------------------------------------------
|
||||
// Friends
|
||||
// -------------------------------------------------------------------------
|
||||
friend class VirtualMachinePool;
|
||||
|
||||
friend int vm_select_cb (
|
||||
void * _vm,
|
||||
int num,
|
||||
char ** values,
|
||||
char ** names);
|
||||
|
||||
// *************************************************************************
|
||||
// Virtual Machine Attributes
|
||||
// *************************************************************************
|
||||
|
||||
// -------------------------------------------------------------------------
|
||||
// Identification variables
|
||||
// -------------------------------------------------------------------------
|
||||
/**
|
||||
* Array id
|
||||
*/
|
||||
int aid;
|
||||
|
||||
/**
|
||||
* Task id
|
||||
*/
|
||||
int tid;
|
||||
|
||||
/**
|
||||
* User (owner) id
|
||||
*/
|
||||
int uid;
|
||||
|
||||
// -------------------------------------------------------------------------
|
||||
// VM Scheduling & Managing Information
|
||||
// -------------------------------------------------------------------------
|
||||
/**
|
||||
* Static scheduling priority
|
||||
*/
|
||||
int priority;
|
||||
|
||||
/**
|
||||
* The VM reschedule flag
|
||||
*/
|
||||
bool reschedule;
|
||||
|
||||
/**
|
||||
* Last time (in epoch) that the VM was rescheduled
|
||||
*/
|
||||
time_t last_reschedule;
|
||||
|
||||
/**
|
||||
* Last time (in epoch) that the VM was polled to get its status
|
||||
*/
|
||||
time_t last_poll;
|
||||
|
||||
// -------------------------------------------------------------------------
|
||||
// Virtual Machine Description
|
||||
// -------------------------------------------------------------------------
|
||||
/**
|
||||
* The Virtual Machine template, holds the VM attributes.
|
||||
*/
|
||||
VirtualMachineTemplate vm_template;
|
||||
|
||||
// Dynamic state of the Virtual Machine
|
||||
|
||||
/**
|
||||
* The state of the virtual machine.
|
||||
*/
|
||||
VmState state;
|
||||
|
||||
/**
|
||||
* The state of the virtual machine (in the Life-cycle Manager).
|
||||
*/
|
||||
LcmState lcm_state;
|
||||
|
||||
/**
|
||||
* Start time, the VM enter the nebula system (in epoch)
|
||||
*/
|
||||
time_t stime;
|
||||
|
||||
/**
|
||||
* Exit time, the VM leave the nebula system (in epoch)
|
||||
*/
|
||||
time_t etime;
|
||||
|
||||
/**
|
||||
* Deployment specific identification string, as returned by the VM driver
|
||||
*/
|
||||
string deploy_id;
|
||||
|
||||
/**
|
||||
* Memory in Megabytes used by the VM
|
||||
*/
|
||||
int memory;
|
||||
|
||||
/**
|
||||
* CPU usage (percent)
|
||||
*/
|
||||
int cpu;
|
||||
|
||||
/**
|
||||
* Network usage, transmitted Kilobytes
|
||||
*/
|
||||
int net_tx;
|
||||
|
||||
/**
|
||||
* Network usage, received Kilobytes
|
||||
*/
|
||||
int net_rx;
|
||||
|
||||
/**
|
||||
* History record, for the current execution
|
||||
*/
|
||||
History * history;
|
||||
|
||||
// -------------------------------------------------------------------------
|
||||
// Logging
|
||||
// -------------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Log class for the virtual machine, it writes log messages in
|
||||
* $ONE_LOCATION/var/$VID/vm.log
|
||||
*/
|
||||
Log * _log;
|
||||
|
||||
// *************************************************************************
|
||||
// DataBase implementation (Private)
|
||||
// *************************************************************************
|
||||
|
||||
/**
|
||||
* Bootstraps the database table(s) associated to the VirtualMachine
|
||||
*/
|
||||
static void bootstrap(SqliteDB * db)
|
||||
{
|
||||
db->exec(VirtualMachine::db_bootstrap);
|
||||
|
||||
db->exec(VirtualMachineTemplate::db_bootstrap);
|
||||
|
||||
db->exec(History::db_bootstrap);
|
||||
};
|
||||
|
||||
/**
|
||||
* Function to unmarshall a VM object, an associated classes.
|
||||
* @param num the number of columns read from the DB
|
||||
* @para names the column names
|
||||
* @para vaues the column values
|
||||
* @return 0 on success
|
||||
*/
|
||||
int unmarshall(int num, char **names, char ** values);
|
||||
|
||||
/**
|
||||
* Updates the VM history record
|
||||
* @param db pointer to the db
|
||||
* @return 0 on success
|
||||
*/
|
||||
int update_history(SqliteDB * db)
|
||||
{
|
||||
if ( history != 0 )
|
||||
{
|
||||
return history->insert(db);
|
||||
}
|
||||
else
|
||||
return -1;
|
||||
};
|
||||
|
||||
/**
|
||||
* Sets the value of a column of the previous VM history record
|
||||
* @param db pointer to the db
|
||||
* @return 0 on success
|
||||
*/
|
||||
int update_previous_history_column(
|
||||
SqliteDB * db,
|
||||
const History::ColNames column,
|
||||
const time_t val);
|
||||
|
||||
/**
|
||||
* Gets the value of a column of the previous VM history record
|
||||
* @param db pointer to the db
|
||||
* @return 0 on success
|
||||
*/
|
||||
int select_previous_history_column(
|
||||
SqliteDB * db,
|
||||
const History::ColNames column,
|
||||
string * value);
|
||||
|
||||
/**
|
||||
* Gets the hid of the previous history host
|
||||
*/
|
||||
int get_previous_hid(SqliteDB * db, int * hid);
|
||||
|
||||
protected:
|
||||
|
||||
//**************************************************************************
|
||||
// Constructor
|
||||
//**************************************************************************
|
||||
|
||||
VirtualMachine(int id=-1);
|
||||
|
||||
virtual ~VirtualMachine();
|
||||
|
||||
// *************************************************************************
|
||||
// DataBase implementation
|
||||
// *************************************************************************
|
||||
|
||||
enum ColNames
|
||||
{
|
||||
OID = 0,
|
||||
AID = 1,
|
||||
TID = 2,
|
||||
UID = 3,
|
||||
PRIORITY = 4,
|
||||
RESCHEDULE = 5,
|
||||
LAST_RESCHEDULE = 6,
|
||||
LAST_POLL = 7,
|
||||
TEMPLATE_ID = 8,
|
||||
STATE = 9,
|
||||
LCM_STATE = 10,
|
||||
STIME = 11,
|
||||
ETIME = 12,
|
||||
DEPLOY_ID = 13,
|
||||
MEMORY = 14,
|
||||
CPU = 15,
|
||||
NET_TX = 16,
|
||||
NET_RX = 17,
|
||||
LIMIT = 18
|
||||
};
|
||||
|
||||
static const char * table;
|
||||
|
||||
static const char * db_names;
|
||||
|
||||
static const char * db_bootstrap;
|
||||
|
||||
/**
|
||||
* Reads the Virtual Machine (identified with its OID) from the database.
|
||||
* @param db pointer to the db
|
||||
* @return 0 on success
|
||||
*/
|
||||
int select(SqliteDB * db);
|
||||
|
||||
/**
|
||||
* Writes the Virtual Machine and its associated template in the database.
|
||||
* @param db pointer to the db
|
||||
* @return 0 on success
|
||||
*/
|
||||
virtual int insert(SqliteDB * db);
|
||||
|
||||
/**
|
||||
* Writes/updates the Virtual Machine data fields in the database.
|
||||
* @param db pointer to the db
|
||||
* @return 0 on success
|
||||
*/
|
||||
virtual int update(SqliteDB * db);
|
||||
|
||||
/**
|
||||
* Deletes a VM from the database and all its associated information:
|
||||
* - History records
|
||||
* - VM template
|
||||
* @param db pointer to the db
|
||||
* @return 0 on success
|
||||
*/
|
||||
virtual int drop(SqliteDB * db)
|
||||
{
|
||||
int rc;
|
||||
|
||||
rc = vm_template.drop(db);
|
||||
|
||||
if ( history != 0 )
|
||||
{
|
||||
rc += history->drop(db);
|
||||
}
|
||||
|
||||
return rc;
|
||||
}
|
||||
};
|
||||
|
||||
#endif /*VIRTUAL_MACHINE_H_*/
|
223
include/VirtualMachineManager.h
Normal file
223
include/VirtualMachineManager.h
Normal file
@ -0,0 +1,223 @@
|
||||
/* -------------------------------------------------------------------------- */
|
||||
/* Copyright 2002-2008, Distributed Systems Architecture Group, Universidad */
|
||||
/* Complutense de Madrid (dsa-research.org) */
|
||||
/* */
|
||||
/* Licensed under the Apache License, Version 2.0 (the "License"); you may */
|
||||
/* not use this file except in compliance with the License. You may obtain */
|
||||
/* a copy of the License at */
|
||||
/* */
|
||||
/* http://www.apache.org/licenses/LICENSE-2.0 */
|
||||
/* */
|
||||
/* Unless required by applicable law or agreed to in writing, software */
|
||||
/* distributed under the License is distributed on an "AS IS" BASIS, */
|
||||
/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. */
|
||||
/* See the License for the specific language governing permissions and */
|
||||
/* limitations under the License. */
|
||||
/* -------------------------------------------------------------------------- */
|
||||
|
||||
#ifndef VIRTUAL_MACHINE_MANAGER_H_
|
||||
#define VIRTUAL_MACHINE_MANAGER_H_
|
||||
|
||||
#include "MadManager.h"
|
||||
#include "ActionManager.h"
|
||||
#include "VirtualMachineManagerDriver.h"
|
||||
#include "VirtualMachinePool.h"
|
||||
#include "HostPool.h"
|
||||
#include "NebulaTemplate.h"
|
||||
|
||||
using namespace std;
|
||||
|
||||
extern "C" void * vmm_action_loop(void *arg);
|
||||
|
||||
class VirtualMachineManager : public MadManager, public ActionListener
|
||||
{
|
||||
public:
|
||||
|
||||
VirtualMachineManager(
|
||||
VirtualMachinePool * _vmpool,
|
||||
HostPool * _hpool,
|
||||
time_t _timer_period,
|
||||
time_t _poll_period,
|
||||
vector<const Attribute*>& _mads);
|
||||
|
||||
~VirtualMachineManager(){};
|
||||
|
||||
enum Actions
|
||||
{
|
||||
DEPLOY,
|
||||
SAVE,
|
||||
SHUTDOWN,
|
||||
CANCEL,
|
||||
MIGRATE,
|
||||
RESTORE,
|
||||
TIMER,
|
||||
FINALIZE
|
||||
};
|
||||
|
||||
/**
|
||||
* Triggers specific actions to the Virtual Machine Manager. This function
|
||||
* wraps the ActionManager trigger function.
|
||||
* @param action the VMM action
|
||||
* @param vid VM unique id. This is the argument of the passed to the
|
||||
* invoked action.
|
||||
*/
|
||||
void trigger(
|
||||
Actions action,
|
||||
int vid);
|
||||
|
||||
/**
|
||||
* This functions starts the associated listener thread, and creates a
|
||||
* new thread for the Virtual Machine Manager. This thread will wait in
|
||||
* an action loop till it receives ACTION_FINALIZE.
|
||||
* @return 0 on success.
|
||||
*/
|
||||
int start();
|
||||
|
||||
/**
|
||||
* Gets the thread identification.
|
||||
* @return pthread_t for the manager thread (that in the action loop).
|
||||
*/
|
||||
pthread_t get_thread_id() const
|
||||
{
|
||||
return vmm_thread;
|
||||
};
|
||||
|
||||
/**
|
||||
* Loads Virtual Machine Manager Mads defined in configuration file
|
||||
* @param uid of the user executing the driver. When uid is 0 the nebula
|
||||
* identity will be used. Otherwise the Mad will be loaded through the
|
||||
* sudo application.
|
||||
*/
|
||||
void load_mads(int uid);
|
||||
|
||||
private:
|
||||
/**
|
||||
* Thread id for the Virtual Machine Manager
|
||||
*/
|
||||
pthread_t vmm_thread;
|
||||
|
||||
/**
|
||||
* Pointer to the Virtual Machine Pool, to access VMs
|
||||
*/
|
||||
VirtualMachinePool * vmpool;
|
||||
|
||||
/**
|
||||
* Pointer to the Host Pool, to access hosts
|
||||
*/
|
||||
HostPool * hpool;
|
||||
|
||||
/**
|
||||
* Timer period for the Virtual Machine Manager.
|
||||
*/
|
||||
time_t timer_period;
|
||||
|
||||
/**
|
||||
* Virtual Machine polling interval
|
||||
*/
|
||||
time_t poll_period;
|
||||
|
||||
/**
|
||||
* Action engine for the Manager
|
||||
*/
|
||||
ActionManager am;
|
||||
|
||||
/**
|
||||
* Function to execute the Manager action loop method within a new pthread
|
||||
* (requires C linkage)
|
||||
*/
|
||||
friend void * vmm_action_loop(void *arg);
|
||||
|
||||
/**
|
||||
* Returns a pointer to a Virtual Machine Manager driver.
|
||||
* @param uid of the owner of the driver
|
||||
* @param name of an attribute of the driver (e.g. its type)
|
||||
* @param value of the attribute
|
||||
* @return the VM driver owned by uid with attribute name equal to value
|
||||
* or 0 in not found
|
||||
*/
|
||||
const VirtualMachineManagerDriver * get(
|
||||
int uid,
|
||||
const string& name,
|
||||
const string& value)
|
||||
{
|
||||
return static_cast<const VirtualMachineManagerDriver *>
|
||||
(MadManager::get(uid,name,value));
|
||||
};
|
||||
|
||||
/**
|
||||
* Returns a pointer to a Virtual Machine Manager driver. The driver is
|
||||
* searched by its name.
|
||||
* @param uid of the owner of the driver
|
||||
* @param name the name of the driver
|
||||
* @return the VM driver owned by uid with attribute name equal to value
|
||||
* or 0 in not found
|
||||
*/
|
||||
const VirtualMachineManagerDriver * get(
|
||||
int uid,
|
||||
const string& name)
|
||||
{
|
||||
string _name("NAME");
|
||||
return static_cast<const VirtualMachineManagerDriver *>
|
||||
(MadManager::get(uid,_name,name));
|
||||
};
|
||||
|
||||
/**
|
||||
* The action function executed when an action is triggered.
|
||||
* @param action the name of the action
|
||||
* @param arg arguments for the action function
|
||||
*/
|
||||
void do_action(
|
||||
const string & action,
|
||||
void * arg);
|
||||
|
||||
/**
|
||||
* Function executed when a DEPLOY action is received. It deploys a VM on
|
||||
* a Host.
|
||||
* @param vid the id of the VM to be deployed.
|
||||
*/
|
||||
void deploy_action(
|
||||
int vid);
|
||||
|
||||
/**
|
||||
* Function to stop a running VM and generate a checkpoint file. This
|
||||
* function is executed when a SAVE action is triggered.
|
||||
* @param vid the id of the VM.
|
||||
*/
|
||||
void save_action(
|
||||
int vid);
|
||||
|
||||
/**
|
||||
* Shutdowns a VM when a SHUTDOWN action is received.
|
||||
* @param vid the id of the VM.
|
||||
*/
|
||||
void shutdown_action(
|
||||
int vid);
|
||||
|
||||
/**
|
||||
* Cancels a VM when a CANCEL action is received.
|
||||
* @param vid the id of the VM.
|
||||
*/
|
||||
void cancel_action(
|
||||
int vid);
|
||||
|
||||
/**
|
||||
* Function to migrate (live) a VM (MIGRATE action).
|
||||
* @param vid the id of the VM.
|
||||
*/
|
||||
void migrate_action(
|
||||
int vid);
|
||||
|
||||
/**
|
||||
* Restores a VM from a checkpoint file.
|
||||
* @param vid the id of the VM.
|
||||
*/
|
||||
void restore_action(
|
||||
int vid);
|
||||
|
||||
/**
|
||||
* This function is executed periodically to poll the running VMs
|
||||
*/
|
||||
void timer_action();
|
||||
};
|
||||
|
||||
#endif /*VIRTUAL_MACHINE_MANAGER_H*/
|
214
include/VirtualMachineManagerDriver.h
Normal file
214
include/VirtualMachineManagerDriver.h
Normal file
@ -0,0 +1,214 @@
|
||||
/* -------------------------------------------------------------------------- */
|
||||
/* Copyright 2002-2008, Distributed Systems Architecture Group, Universidad */
|
||||
/* Complutense de Madrid (dsa-research.org) */
|
||||
/* */
|
||||
/* Licensed under the Apache License, Version 2.0 (the "License"); you may */
|
||||
/* not use this file except in compliance with the License. You may obtain */
|
||||
/* a copy of the License at */
|
||||
/* */
|
||||
/* http://www.apache.org/licenses/LICENSE-2.0 */
|
||||
/* */
|
||||
/* Unless required by applicable law or agreed to in writing, software */
|
||||
/* distributed under the License is distributed on an "AS IS" BASIS, */
|
||||
/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. */
|
||||
/* See the License for the specific language governing permissions and */
|
||||
/* limitations under the License. */
|
||||
/* -------------------------------------------------------------------------- */
|
||||
|
||||
#ifndef VIRTUAL_MACHINE_MANAGER_DRIVER_H_
|
||||
#define VIRTUAL_MACHINE_MANAGER_DRIVER_H_
|
||||
|
||||
#include <map>
|
||||
#include <string>
|
||||
#include <sstream>
|
||||
|
||||
#include "Mad.h"
|
||||
#include "VirtualMachinePool.h"
|
||||
|
||||
using namespace std;
|
||||
|
||||
/**
|
||||
* VirtualMachineManagerDriver provides a base class to implement VM Manager
|
||||
* Drivers. This class implements the protocol and recover functions
|
||||
* from the Mad interface. Classes derived from the VirtualMachineManagerDriver
|
||||
* must implement the deployment function to generate specific VM
|
||||
* deployment information for the unerlying MAD.
|
||||
*/
|
||||
class VirtualMachineManagerDriver : public Mad
|
||||
{
|
||||
public:
|
||||
|
||||
VirtualMachineManagerDriver(
|
||||
int userid,
|
||||
const map<string,string>& attrs,
|
||||
bool sudo,
|
||||
VirtualMachinePool * pool):
|
||||
Mad(userid,attrs,sudo),vmpool(pool)
|
||||
{}
|
||||
;
|
||||
|
||||
virtual ~VirtualMachineManagerDriver()
|
||||
{}
|
||||
;
|
||||
|
||||
/**
|
||||
* Implements the VM Manager driver protocol.
|
||||
* @param message the string read from the driver
|
||||
*/
|
||||
void protocol(
|
||||
string& message);
|
||||
|
||||
/**
|
||||
* TODO: What do we need here? just poll the active VMs to recover
|
||||
* connections? Or an specific recover action from the MAD?
|
||||
*/
|
||||
void recover();
|
||||
|
||||
/**
|
||||
* Generates a driver-specific deployment file:
|
||||
* @param vm pointer to a virtual machine
|
||||
* @param file_name to generate the deployment description
|
||||
* @return 0 on success
|
||||
*/
|
||||
virtual int deployment_description(
|
||||
const VirtualMachine * vm,
|
||||
const string& file_name) const = 0;
|
||||
|
||||
private:
|
||||
/**
|
||||
* Pointer to the Virtual Machine Pool, to access VMs
|
||||
*/
|
||||
VirtualMachinePool * vmpool;
|
||||
|
||||
friend class VirtualMachineManager;
|
||||
|
||||
/**
|
||||
* Sends a deploy request to the MAD: "DEPLOY ID HOST CONF -"
|
||||
* @param oid the virtual machine id.
|
||||
* @param host the hostname
|
||||
* @param conf the filename of the deployment file
|
||||
*/
|
||||
void deploy (
|
||||
const int oid,
|
||||
const string& host,
|
||||
const string& conf) const;
|
||||
|
||||
/**
|
||||
* Sends a shutdown request to the MAD: "SHUTDOWN ID HOST NAME -"
|
||||
* @param oid the virtual machine id.
|
||||
* @param host the hostname
|
||||
* @param name of the Virtual Machine (deployment id), as returned by the
|
||||
* driver
|
||||
*/
|
||||
void shutdown (
|
||||
const int oid,
|
||||
const string& host,
|
||||
const string& name) const;
|
||||
|
||||
/**
|
||||
* Sends a cancel request to the MAD: "CANCEL ID HOST NAME -"
|
||||
* @param oid the virtual machine id.
|
||||
* @param host the hostname
|
||||
* @param name of the Virtual Machine (deployment id), as returned by the
|
||||
* driver
|
||||
*/
|
||||
void cancel (
|
||||
const int oid,
|
||||
const string& host,
|
||||
const string& name) const;
|
||||
|
||||
/**
|
||||
* Sends a checkpoint request to the MAD: "CHECKPOINT ID HOST NAME FILE"
|
||||
* @param oid the virtual machine id.
|
||||
* @param host the hostname
|
||||
* @param name of the Virtual Machine (deployment id), as returned by the
|
||||
* driver
|
||||
* @param file the filename to generate the checkpoint file
|
||||
*/
|
||||
void checkpoint (
|
||||
const int oid,
|
||||
const string& host,
|
||||
const string& name,
|
||||
const string& file) const;
|
||||
|
||||
/**
|
||||
* Sends a save request to the MAD: "SAVE ID HOST NAME FILE"
|
||||
* @param oid the virtual machine id.
|
||||
* @param host the hostname
|
||||
* @param name of the Virtual Machine (deployment id), as returned by the
|
||||
* driver
|
||||
* @param file the filename to generate the checkpoint file
|
||||
*/
|
||||
void save (
|
||||
const int oid,
|
||||
const string& host,
|
||||
const string& name,
|
||||
const string& file) const;
|
||||
|
||||
/**
|
||||
* Sends a save request to the MAD: "RESTORE ID HOST FILE -"
|
||||
* @param oid the virtual machine id.
|
||||
* @param host the hostname
|
||||
* @param file the filename of the checkpoint file to restore the VM
|
||||
* from
|
||||
*/
|
||||
void restore (
|
||||
const int oid,
|
||||
const string& host,
|
||||
const string& file) const;
|
||||
|
||||
/**
|
||||
* Sends a migrate request to the MAD: "MIGRATE ID HOST NAME DEST"
|
||||
* @param oid the virtual machine id.
|
||||
* @param shost the original host (source)
|
||||
* @param name of the Virtual Machine (deployment id), as returned by the
|
||||
* driver
|
||||
* @param dhost the destination host
|
||||
*/
|
||||
void migrate (
|
||||
const int oid,
|
||||
const string& shost,
|
||||
const string& name,
|
||||
const string& dhost) const;
|
||||
|
||||
/**
|
||||
* Sends a poll request to the MAD: "POLL ID HOST NAME -"
|
||||
* @param oid the virtual machine id.
|
||||
* @param host the hostname
|
||||
* @param name of the Virtual Machine (deployment id), as returned by the
|
||||
* driver
|
||||
*/
|
||||
void poll (
|
||||
const int oid,
|
||||
const string& host,
|
||||
const string& name) const;
|
||||
};
|
||||
|
||||
/* -------------------------------------------------------------------------- */
|
||||
/* -------------------------------------------------------------------------- */
|
||||
|
||||
class KvmDriver : public VirtualMachineManagerDriver
|
||||
{
|
||||
public:
|
||||
|
||||
KvmDriver(
|
||||
int userid,
|
||||
const map<string,string> &attrs,
|
||||
bool sudo,
|
||||
VirtualMachinePool * pool):
|
||||
VirtualMachineManagerDriver(userid, attrs,sudo,pool)
|
||||
{};
|
||||
|
||||
~KvmDriver(){};
|
||||
|
||||
private:
|
||||
int deployment_description(
|
||||
const VirtualMachine * vm,
|
||||
const string& file_name) const
|
||||
{
|
||||
return 0;
|
||||
};
|
||||
};
|
||||
|
||||
#endif /*VIRTUAL_MACHINE_MANAGER_DRIVER_H_*/
|
||||
|
133
include/VirtualMachinePool.h
Normal file
133
include/VirtualMachinePool.h
Normal file
@ -0,0 +1,133 @@
|
||||
/* -------------------------------------------------------------------------- */
|
||||
/* Copyright 2002-2008, Distributed Systems Architecture Group, Universidad */
|
||||
/* Complutense de Madrid (dsa-research.org) */
|
||||
/* */
|
||||
/* Licensed under the Apache License, Version 2.0 (the "License"); you may */
|
||||
/* not use this file except in compliance with the License. You may obtain */
|
||||
/* a copy of the License at */
|
||||
/* */
|
||||
/* http://www.apache.org/licenses/LICENSE-2.0 */
|
||||
/* */
|
||||
/* Unless required by applicable law or agreed to in writing, software */
|
||||
/* distributed under the License is distributed on an "AS IS" BASIS, */
|
||||
/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. */
|
||||
/* See the License for the specific language governing permissions and */
|
||||
/* limitations under the License. */
|
||||
/* -------------------------------------------------------------------------- */
|
||||
|
||||
#ifndef VIRTUAL_MACHINE_POOL_H_
|
||||
#define VIRTUAL_MACHINE_POOL_H_
|
||||
|
||||
#include "PoolSQL.h"
|
||||
#include "VirtualMachine.h"
|
||||
|
||||
#include <time.h>
|
||||
|
||||
using namespace std;
|
||||
|
||||
|
||||
/**
|
||||
* The Virtual Machine Pool class. ...
|
||||
*/
|
||||
class VirtualMachinePool : public PoolSQL
|
||||
{
|
||||
public:
|
||||
|
||||
VirtualMachinePool(SqliteDB * db):PoolSQL(db,VirtualMachine::table){};
|
||||
|
||||
~VirtualMachinePool(){};
|
||||
|
||||
/**
|
||||
* Function to allocate a new VM object
|
||||
* @param uid user id (the owner of the VM)
|
||||
* @param stemplate a string describing the VM
|
||||
* @param oid the id assigned to the VM (output)
|
||||
* @param on_hold flag to submit on hold
|
||||
* @return 0 on success, -1 error inserting in DB or -2 error parsing
|
||||
* the template
|
||||
*/
|
||||
int allocate (
|
||||
int uid,
|
||||
const string& stemplate,
|
||||
int * oid,
|
||||
bool on_hold = false);
|
||||
|
||||
/**
|
||||
* Function to get a VM from the pool, if the object is not in memory
|
||||
* it is loade from the DB
|
||||
* @param oid VM unique id
|
||||
* @param lock locks the VM mutex
|
||||
* @return a pointer to the VM, 0 if the VM could not be loaded
|
||||
*/
|
||||
VirtualMachine * get(
|
||||
int oid,
|
||||
bool lock)
|
||||
{
|
||||
return static_cast<VirtualMachine *>(PoolSQL::get(oid,lock));
|
||||
};
|
||||
|
||||
/**
|
||||
* Function to get the IDs of running VMs
|
||||
* @param oids a vector that contains the IDs
|
||||
* @return 0 on success
|
||||
*/
|
||||
int get_running(
|
||||
vector<int>& oids);
|
||||
|
||||
/**
|
||||
* Function to get the IDs of pending VMs
|
||||
* @param oids a vector that contains the IDs
|
||||
* @return 0 on success
|
||||
*/
|
||||
int get_pending(
|
||||
vector<int>& oids);
|
||||
|
||||
//--------------------------------------------------------------------------
|
||||
// Virtual Machine DB access functions
|
||||
//--------------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Updates the history record of a VM, the lock of the vm SHOULD be locked
|
||||
* @param vm pointer to the virtual machine object
|
||||
* @return 0 on success
|
||||
*/
|
||||
int update_history(
|
||||
VirtualMachine * vm)
|
||||
{
|
||||
return vm->update_history(db);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the ID of the previous host
|
||||
* @param vm pointer to the virtual machine object
|
||||
* @param hid the ID of the host
|
||||
* @return 0 on success
|
||||
*/
|
||||
int get_previous_hid(
|
||||
VirtualMachine * vm,
|
||||
int * hid)
|
||||
{
|
||||
return vm->get_previous_hid(db,hid);
|
||||
};
|
||||
|
||||
/**
|
||||
* Bootstraps the database table(s) associated to the VirtualMachine pool
|
||||
*/
|
||||
void bootstrap()
|
||||
{
|
||||
VirtualMachine::bootstrap(db);
|
||||
};
|
||||
|
||||
private:
|
||||
|
||||
/**
|
||||
* Factory method to produce VM objects
|
||||
* @return a pointer to the new VM
|
||||
*/
|
||||
PoolObjectSQL * create()
|
||||
{
|
||||
return new VirtualMachine;
|
||||
};
|
||||
};
|
||||
|
||||
#endif /*VIRTUAL_MACHINE_POOL_H_*/
|
47
include/VirtualMachineTemplate.h
Normal file
47
include/VirtualMachineTemplate.h
Normal file
@ -0,0 +1,47 @@
|
||||
/* -------------------------------------------------------------------------- */
|
||||
/* Copyright 2002-2008, Distributed Systems Architecture Group, Universidad */
|
||||
/* Complutense de Madrid (dsa-research.org) */
|
||||
/* */
|
||||
/* Licensed under the Apache License, Version 2.0 (the "License"); you may */
|
||||
/* not use this file except in compliance with the License. You may obtain */
|
||||
/* a copy of the License at */
|
||||
/* */
|
||||
/* http://www.apache.org/licenses/LICENSE-2.0 */
|
||||
/* */
|
||||
/* Unless required by applicable law or agreed to in writing, software */
|
||||
/* distributed under the License is distributed on an "AS IS" BASIS, */
|
||||
/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. */
|
||||
/* See the License for the specific language governing permissions and */
|
||||
/* limitations under the License. */
|
||||
/* -------------------------------------------------------------------------- */
|
||||
|
||||
#ifndef VIRTUAL_MACHINE_TEMPLATE_H_
|
||||
#define VIRTUAL_MACHINE_TEMPLATE_H_
|
||||
|
||||
#include "TemplateSQL.h"
|
||||
|
||||
using namespace std;
|
||||
|
||||
/**
|
||||
* Virtual Machine Template class, it represents a VM configuration file.
|
||||
*/
|
||||
class VirtualMachineTemplate : public TemplateSQL
|
||||
{
|
||||
public:
|
||||
VirtualMachineTemplate(int tid = -1):
|
||||
TemplateSQL(table,tid){};
|
||||
|
||||
~VirtualMachineTemplate(){};
|
||||
|
||||
private:
|
||||
friend class VirtualMachine;
|
||||
|
||||
static const char * table;
|
||||
|
||||
static const char * db_bootstrap;
|
||||
};
|
||||
|
||||
/* -------------------------------------------------------------------------- */
|
||||
/* -------------------------------------------------------------------------- */
|
||||
|
||||
#endif /*VIRTUAL_MACHINE_TEMPLATE_H_*/
|
114
include/XenDriver.h
Normal file
114
include/XenDriver.h
Normal file
@ -0,0 +1,114 @@
|
||||
/* -------------------------------------------------------------------------- */
|
||||
/* Copyright 2002-2008, Distributed Systems Architecture Group, Universidad */
|
||||
/* Complutense de Madrid (dsa-research.org) */
|
||||
/* */
|
||||
/* Licensed under the Apache License, Version 2.0 (the "License"); you may */
|
||||
/* not use this file except in compliance with the License. You may obtain */
|
||||
/* a copy of the License at */
|
||||
/* */
|
||||
/* http://www.apache.org/licenses/LICENSE-2.0 */
|
||||
/* */
|
||||
/* Unless required by applicable law or agreed to in writing, software */
|
||||
/* distributed under the License is distributed on an "AS IS" BASIS, */
|
||||
/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. */
|
||||
/* See the License for the specific language governing permissions and */
|
||||
/* limitations under the License. */
|
||||
/* -------------------------------------------------------------------------- */
|
||||
|
||||
#ifndef XEN_DRIVER_H_
|
||||
#define XEN_DRIVER_H_
|
||||
|
||||
#include <map>
|
||||
#include <string>
|
||||
#include <sstream>
|
||||
#include "Nebula.h"
|
||||
#include "VirtualMachineManagerDriver.h"
|
||||
|
||||
using namespace std;
|
||||
|
||||
/**
|
||||
* Xen Driver class implements a VM Manager Driver to interface with the Xen
|
||||
* hypervisor.
|
||||
*/
|
||||
class XenDriver : public VirtualMachineManagerDriver
|
||||
{
|
||||
public:
|
||||
|
||||
XenDriver(
|
||||
int userid,
|
||||
const map<string,string> &attrs,
|
||||
bool sudo,
|
||||
VirtualMachinePool * pool):
|
||||
VirtualMachineManagerDriver(userid, attrs,sudo,pool)
|
||||
{
|
||||
map<string,string>::const_iterator it;
|
||||
char * error_msg = 0;
|
||||
const char * cfile;
|
||||
string file;
|
||||
int rc;
|
||||
ostringstream oss;
|
||||
|
||||
it = attrs.find("DEFAULT");
|
||||
|
||||
if ( it != attrs.end() )
|
||||
{
|
||||
if (it->second[0] != '/') //Look in ONE_LOCATION
|
||||
{
|
||||
Nebula& nd = Nebula::instance();
|
||||
|
||||
file = nd.get_nebula_location() + "/" + it->second;
|
||||
cfile = file.c_str();
|
||||
}
|
||||
else //Absolute Path
|
||||
{
|
||||
cfile = it->second.c_str();
|
||||
}
|
||||
|
||||
rc = xen_conf.parse(cfile, &error_msg);
|
||||
|
||||
if (( rc != 0 ) && ( error_msg != 0))
|
||||
{
|
||||
oss << "Error loading xen driver configuration file: "
|
||||
<< error_msg;
|
||||
|
||||
Nebula::log("VMM", Log::ERROR, oss);
|
||||
|
||||
free(error_msg);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
~XenDriver(){};
|
||||
|
||||
private:
|
||||
/**
|
||||
* Configuration file for the driver
|
||||
*/
|
||||
Template xen_conf;
|
||||
|
||||
/**
|
||||
* Generates a configuration attr from driver configuration file
|
||||
* @param name of config attribute for the domain
|
||||
* @param value of the attribute
|
||||
*/
|
||||
void get_default(
|
||||
const char * name,
|
||||
string& value) const
|
||||
{
|
||||
string sn = name;
|
||||
|
||||
xen_conf.get(sn,value);
|
||||
}
|
||||
|
||||
/**
|
||||
* Generates a xen-specific deployment file seexmdomain.cfg(5):
|
||||
* @param vm pointer to a virtual machine
|
||||
* @param file_name to generate the deployment description
|
||||
* @return 0 on success
|
||||
*/
|
||||
int deployment_description(
|
||||
const VirtualMachine * vm,
|
||||
const string& file_name) const;
|
||||
};
|
||||
|
||||
#endif /*XEN_DRIVER_H_*/
|
63
install.sh
Executable file
63
install.sh
Executable file
@ -0,0 +1,63 @@
|
||||
#!/bin/sh
|
||||
|
||||
SRC_DIR=$PWD
|
||||
DST_DIR=$1
|
||||
|
||||
echo $SRC_DIR
|
||||
echo $DST_DIR
|
||||
|
||||
inst_ln() {
|
||||
ln -s $SRC_DIR/$1 $DST_DIR/$2
|
||||
}
|
||||
|
||||
inst_cp() {
|
||||
cp $SRC_DIR/$1 $DST_DIR/$2
|
||||
}
|
||||
|
||||
if [ -z "$SRC_DIR" -o -z "$DST_DIR" ]; then
|
||||
echo Must supply a destination directory
|
||||
exit -1
|
||||
fi
|
||||
|
||||
DIRS="/bin /etc /etc/mad /etc/default /libexec /lib/ruby /var /share/examples /lib/im_probes"
|
||||
|
||||
for d in $DIRS; do
|
||||
mkdir -p $DST_DIR$d
|
||||
done
|
||||
|
||||
inst_ln src/nebula/oned bin
|
||||
inst_ln src/scheduler/mm_sched bin
|
||||
inst_ln src/client/ruby/onevm bin
|
||||
inst_ln src/client/ruby/onehost bin
|
||||
|
||||
inst_cp share/etc/oned.conf etc
|
||||
inst_ln share/etc/mad/defaultrc etc/mad
|
||||
inst_ln share/etc/mad/im_sshrc etc/mad
|
||||
inst_ln share/etc/mad/vmm_xenrc etc/mad
|
||||
inst_ln share/etc/default/vmm_xen.conf etc/default
|
||||
|
||||
inst_ln share/scripts/madcommon.sh libexec
|
||||
|
||||
inst_ln src/vmm_mad/xen/one_vmm_xen.rb bin
|
||||
inst_ln src/vmm_mad/xen/one_vmm_xen bin
|
||||
|
||||
inst_ln src/im_mad/xen/one_im_ssh.rb bin
|
||||
inst_ln src/im_mad/xen/one_im_ssh bin
|
||||
|
||||
inst_cp src/im_mad/xen/one_im_ssh.conf etc
|
||||
inst_ln src/vmm_mad/xen/one_mad.rb lib/ruby
|
||||
inst_ln src/im_mad/xen/one_ssh.rb lib/ruby
|
||||
inst_ln src/client/ruby/one.rb lib/ruby
|
||||
inst_ln src/client/ruby/client_utilities.rb lib/ruby
|
||||
inst_ln src/client/ruby/command_parse.rb lib/ruby
|
||||
|
||||
inst_ln src/im_mad/xen/architecture.sh lib/im_probes
|
||||
inst_ln src/im_mad/xen/cpu.sh lib/im_probes
|
||||
inst_ln src/im_mad/xen/name.sh lib/im_probes
|
||||
inst_ln src/im_mad/xen/xen.rb lib/im_probes
|
||||
|
||||
inst_cp share/scripts/one bin
|
||||
|
||||
inst_cp share/examples/vm.template share/examples
|
||||
|
||||
|
BIN
share/doc/design/AuthorizationAuthentication.png
Normal file
BIN
share/doc/design/AuthorizationAuthentication.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 28 KiB |
429
share/doc/design/HostPool.xmi
Normal file
429
share/doc/design/HostPool.xmi
Normal file
@ -0,0 +1,429 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<XMI xmlns:UML="http://schema.omg.org/spec/UML/1.3" verified="false" timestamp="2008-01-24T17:04:49" xmi.version="1.2" >
|
||||
<XMI.header>
|
||||
<XMI.documentation>
|
||||
<XMI.exporter>umbrello uml modeller http://uml.sf.net</XMI.exporter>
|
||||
<XMI.exporterVersion>1.5.8</XMI.exporterVersion>
|
||||
<XMI.exporterEncoding>UnicodeUTF8</XMI.exporterEncoding>
|
||||
</XMI.documentation>
|
||||
<XMI.metamodel xmi.name="UML" href="UML.xml" xmi.version="1.3" />
|
||||
</XMI.header>
|
||||
<XMI.content>
|
||||
<UML:Model isSpecification="false" isLeaf="false" isRoot="false" xmi.id="m1" isAbstract="false" name="UML Model" >
|
||||
<UML:Namespace.ownedElement>
|
||||
<UML:Stereotype isSpecification="false" isLeaf="false" visibility="public" namespace="m1" xmi.id="folder" isRoot="false" isAbstract="false" name="folder" />
|
||||
<UML:Stereotype isSpecification="false" isLeaf="false" visibility="public" namespace="m1" xmi.id="datatype" isRoot="false" isAbstract="false" name="datatype" />
|
||||
<UML:Stereotype isSpecification="false" isLeaf="false" visibility="public" namespace="m1" xmi.id="interface" isRoot="false" isAbstract="false" name="interface" />
|
||||
<UML:Stereotype isSpecification="false" isLeaf="false" visibility="public" namespace="m1" xmi.id="ActionListener" isRoot="false" isAbstract="false" name="ActionListener" />
|
||||
<UML:Stereotype isSpecification="false" isLeaf="false" visibility="public" namespace="m1" xmi.id="enum" isRoot="false" isAbstract="false" name="enum" />
|
||||
<UML:Model stereotype="folder" isSpecification="false" isLeaf="false" visibility="public" namespace="m1" xmi.id="Logical View" isRoot="false" isAbstract="false" name="Logical View" >
|
||||
<UML:Namespace.ownedElement>
|
||||
<UML:Package stereotype="folder" isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="Datatypes" isRoot="false" isAbstract="false" name="Datatypes" >
|
||||
<UML:Namespace.ownedElement>
|
||||
<UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="bqKIZpHLv42H" isRoot="false" isAbstract="false" name="int" />
|
||||
<UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="oRTstiC5X0HW" isRoot="false" isAbstract="false" name="char" />
|
||||
<UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="BKzfuxuVlEmK" isRoot="false" isAbstract="false" name="bool" />
|
||||
<UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="41ex5eEr4fjx" isRoot="false" isAbstract="false" name="float" />
|
||||
<UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="Nu2tsIN4aMhU" isRoot="false" isAbstract="false" name="double" />
|
||||
<UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="Hby3oiLsjxpm" isRoot="false" isAbstract="false" name="short" />
|
||||
<UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="c2eghLb5Fcw6" isRoot="false" isAbstract="false" name="long" />
|
||||
<UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="sJASdpuvRqwF" isRoot="false" isAbstract="false" name="unsigned int" />
|
||||
<UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="WF5DDs0nucRc" isRoot="false" isAbstract="false" name="unsigned short" />
|
||||
<UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="x2fBcbHSsPuV" isRoot="false" isAbstract="false" name="unsigned long" />
|
||||
<UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="EnOdbIq8WtLj" isRoot="false" isAbstract="false" name="string" />
|
||||
<UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="FRk6rIA1W1VM" isRoot="false" isAbstract="false" name="sqlite3 *" elementReference="vy53e946a47C" />
|
||||
<UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="XMIKc2o5J6Nu" isRoot="false" isAbstract="false" name="ActionListener *" elementReference="vy53e946a47C" />
|
||||
<UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="WUJUz2wkP4qL" isRoot="false" isAbstract="false" name="map<int,ObjectSQL*>" elementReference="vy53e946a47C" />
|
||||
<UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="XNuw315mXeUm" isRoot="false" isAbstract="false" name="ObjectSQL *" />
|
||||
<UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="vy53e946a47C" isRoot="false" isAbstract="false" name="undef" >
|
||||
<UML:GeneralizableElement.generalization>
|
||||
<UML:Generalization xmi.idref="KOw9slpUVSCK" />
|
||||
</UML:GeneralizableElement.generalization>
|
||||
</UML:DataType>
|
||||
<UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="mxryNx8LdqSJ" isRoot="false" isAbstract="false" name="map<int,attribute>" elementReference="qTRhqpQ0PE3f" />
|
||||
<UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="GEL6a9ZVYNMe" isRoot="false" isAbstract="false" name="map<string,attribute>" />
|
||||
</UML:Namespace.ownedElement>
|
||||
</UML:Package>
|
||||
<UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="ruL8hEHJf71m" name="" >
|
||||
<UML:Association.connection>
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="yt6cBNUrjmYX" aggregation="composite" type="vy53e946a47C" name="" />
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="d3tJqhM02fUW" aggregation="none" type="vy53e946a47C" name="" />
|
||||
</UML:Association.connection>
|
||||
</UML:Association>
|
||||
<UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="hjipPCuUAVPQ" name="" >
|
||||
<UML:Association.connection>
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="Y6jK2nmMJdZT" aggregation="composite" type="vy53e946a47C" name="" multiplicity="1" />
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="kqqfD8AWfUhF" aggregation="none" type="vy53e946a47C" name="" multiplicity="0..*" />
|
||||
</UML:Association.connection>
|
||||
</UML:Association>
|
||||
<UML:Abstraction isSpecification="false" visibility="public" namespace="Logical View" xmi.id="DCXqsURB7Car" client="vy53e946a47C" name="" supplier="vy53e946a47C" />
|
||||
<UML:Abstraction isSpecification="false" visibility="public" namespace="Logical View" xmi.id="VvRc5zSWiu2N" client="vy53e946a47C" name="" supplier="vy53e946a47C" />
|
||||
<UML:Abstraction isSpecification="false" visibility="public" namespace="Logical View" xmi.id="Gq5yk7K4083P" client="vy53e946a47C" name="" supplier="vy53e946a47C" />
|
||||
<UML:Abstraction isSpecification="false" visibility="public" namespace="Logical View" xmi.id="eHdeNg3WcYlX" client="vy53e946a47C" name="" supplier="vy53e946a47C" />
|
||||
<UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="Are2UTPMWnQH" name="" >
|
||||
<UML:Association.connection>
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="BH4YBlYQlPkv" aggregation="composite" type="vy53e946a47C" name="" />
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="qvPqLxAjSVdV" aggregation="none" type="vy53e946a47C" name="" />
|
||||
</UML:Association.connection>
|
||||
</UML:Association>
|
||||
<UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="CwDiWUhJndUK" name="" >
|
||||
<UML:Association.connection>
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="JyDAUROPZKuE" aggregation="composite" type="vy53e946a47C" name="" />
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="GrOZjIIJcVwX" aggregation="none" type="vy53e946a47C" name="" />
|
||||
</UML:Association.connection>
|
||||
</UML:Association>
|
||||
<UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="ZPsL0MdKjRuq" name="" >
|
||||
<UML:Association.connection>
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="whTwtpzZjWr4" aggregation="composite" type="vy53e946a47C" name="" />
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="wqmkJO2r35Lz" aggregation="none" type="vy53e946a47C" name="" />
|
||||
</UML:Association.connection>
|
||||
</UML:Association>
|
||||
<UML:Generalization isSpecification="false" child="vy53e946a47C" visibility="public" namespace="Logical View" xmi.id="KOw9slpUVSCK" parent="vy53e946a47C" discriminator="" name="" />
|
||||
<UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="Zew276Kva1UC" name="" >
|
||||
<UML:Association.connection>
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="Orf1c6UUuOnp" aggregation="composite" type="vy53e946a47C" name="" />
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="qLBqeQIn2wFp" aggregation="none" type="vy53e946a47C" name="" />
|
||||
</UML:Association.connection>
|
||||
</UML:Association>
|
||||
<UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="8OffyHH7J51e" name="" >
|
||||
<UML:Association.connection>
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="URW6V0YHrpxc" aggregation="composite" type="vy53e946a47C" name="" />
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="4CeIAIy67iS4" aggregation="none" type="vy53e946a47C" name="" />
|
||||
</UML:Association.connection>
|
||||
</UML:Association>
|
||||
<UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="rLzAQznN0fxo" name="" >
|
||||
<UML:Association.connection>
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="1LmgSAS4HrMR" aggregation="composite" type="vy53e946a47C" name="" />
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="Z9hZsMkOOqR8" aggregation="none" type="vy53e946a47C" name="" multiplicity="2" />
|
||||
</UML:Association.connection>
|
||||
</UML:Association>
|
||||
<UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="N2IAYOSx9uEH" name="" >
|
||||
<UML:Association.connection>
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="3EpSM3LcDD0s" aggregation="composite" type="vy53e946a47C" name="" />
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="8vpNJkCHGdbQ" aggregation="none" type="vy53e946a47C" name="" />
|
||||
</UML:Association.connection>
|
||||
</UML:Association>
|
||||
<UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="adQpG9tPizWw" name="" >
|
||||
<UML:Association.connection>
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="1ACRWhTEcsaP" aggregation="composite" type="vy53e946a47C" name="" />
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="YzTkuZMuQTei" aggregation="none" type="vy53e946a47C" name="" />
|
||||
</UML:Association.connection>
|
||||
</UML:Association>
|
||||
<UML:Abstraction isSpecification="false" visibility="public" namespace="Logical View" xmi.id="iNuf7uC50BLw" client="vy53e946a47C" name="" supplier="vy53e946a47C" />
|
||||
<UML:Class isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="FTcjgY1ruC0v" isRoot="false" isAbstract="false" name="ObjectSQL" >
|
||||
<UML:Classifier.feature>
|
||||
<UML:Attribute isSpecification="false" visibility="private" xmi.id="1oS3xv31KiB4" type="bqKIZpHLv42H" name="oid" />
|
||||
<UML:Attribute isSpecification="false" visibility="private" xmi.id="ixTgs2fhSgcN" type="ypAsly1Z2KtR" name="mutex" />
|
||||
<UML:Operation isSpecification="false" isLeaf="false" visibility="public" xmi.id="nbM2o3ajdhrk" isRoot="false" isAbstract="false" isQuery="false" name="lock" />
|
||||
<UML:Operation isSpecification="false" isLeaf="false" visibility="public" xmi.id="cYMrUig7UHTW" isRoot="false" isAbstract="false" isQuery="false" name="unlock" />
|
||||
<UML:Operation isSpecification="false" isLeaf="false" visibility="public" xmi.id="IDwc2QJgWnvx" isRoot="false" isAbstract="true" isQuery="false" name="select" >
|
||||
<UML:BehavioralFeature.parameter>
|
||||
<UML:Parameter isSpecification="false" visibility="private" xmi.id="XAJL1i0cYd38" value="" type="FRk6rIA1W1VM" name="db" />
|
||||
</UML:BehavioralFeature.parameter>
|
||||
</UML:Operation>
|
||||
<UML:Operation isSpecification="false" isLeaf="false" visibility="public" xmi.id="M1RmI6G51EM0" isRoot="false" isAbstract="true" isQuery="false" name="insert" >
|
||||
<UML:BehavioralFeature.parameter>
|
||||
<UML:Parameter isSpecification="false" visibility="private" xmi.id="t0UviVXF8YLM" value="" type="FRk6rIA1W1VM" name="db" />
|
||||
</UML:BehavioralFeature.parameter>
|
||||
</UML:Operation>
|
||||
</UML:Classifier.feature>
|
||||
</UML:Class>
|
||||
<UML:Class isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="QzClxwWHdfMc" isRoot="false" isAbstract="false" name="PoolSQL" >
|
||||
<UML:Classifier.feature>
|
||||
<UML:Attribute isSpecification="false" visibility="private" xmi.id="ufg9C6NNEIhF" type="bqKIZpHLv42H" name="lastOID" />
|
||||
<UML:Attribute isSpecification="false" visibility="private" xmi.id="FZr0VlUmM86y" type="WUJUz2wkP4qL" name="pool" />
|
||||
<UML:Attribute isSpecification="false" visibility="private" xmi.id="ItJ2xkSJdUgP" type="FRk6rIA1W1VM" name="db" />
|
||||
<UML:Operation isSpecification="false" isLeaf="false" visibility="private" xmi.id="nTmQ2dvvUMVn" isRoot="false" isAbstract="true" isQuery="false" name="initLastOID" />
|
||||
<UML:Operation isSpecification="false" isLeaf="false" visibility="private" xmi.id="vcv2H4PsHW1N" isRoot="false" isAbstract="true" isQuery="false" name="create" >
|
||||
<UML:BehavioralFeature.parameter>
|
||||
<UML:Parameter kind="return" xmi.id="xOMjFuuBaxiB" type="XNuw315mXeUm" />
|
||||
</UML:BehavioralFeature.parameter>
|
||||
</UML:Operation>
|
||||
<UML:Operation isSpecification="false" isLeaf="false" visibility="public" xmi.id="tZBwi4Zb7qdU" isRoot="false" isAbstract="false" isQuery="false" name="allocate" >
|
||||
<UML:BehavioralFeature.parameter>
|
||||
<UML:Parameter kind="return" xmi.id="caYspxUlaybN" type="bqKIZpHLv42H" />
|
||||
<UML:Parameter isSpecification="false" visibility="private" xmi.id="gGjXn5Sh8Rku" value="" type="XNuw315mXeUm" name="obj" />
|
||||
</UML:BehavioralFeature.parameter>
|
||||
</UML:Operation>
|
||||
<UML:Operation isSpecification="false" isLeaf="false" visibility="public" xmi.id="4HEQcydWqn6n" isRoot="false" isAbstract="false" isQuery="false" name="get" >
|
||||
<UML:BehavioralFeature.parameter>
|
||||
<UML:Parameter kind="return" xmi.id="XWMuNb4DpWFh" type="XNuw315mXeUm" />
|
||||
<UML:Parameter isSpecification="false" visibility="private" xmi.id="JCfn5YzTBFJW" value="" type="bqKIZpHLv42H" name="oid" />
|
||||
<UML:Parameter isSpecification="false" visibility="private" xmi.id="rGU4tF7PEYbS" value="" type="BKzfuxuVlEmK" name="lock" />
|
||||
</UML:BehavioralFeature.parameter>
|
||||
</UML:Operation>
|
||||
</UML:Classifier.feature>
|
||||
</UML:Class>
|
||||
<UML:Dependency isSpecification="false" visibility="public" namespace="Logical View" xmi.id="3a0CTjhkgTis" client="QzClxwWHdfMc" name="" supplier="FTcjgY1ruC0v" />
|
||||
<UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="fvsi8gCLNwfR" name="" >
|
||||
<UML:Association.connection>
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="ZBJB2v6gLVcX" aggregation="aggregate" type="QzClxwWHdfMc" name="" />
|
||||
<UML:AssociationEnd isSpecification="false" visibility="private" changeability="changeable" isNavigable="true" xmi.id="8XGGZCrdFXKT" aggregation="none" type="FTcjgY1ruC0v" name="pool" multiplicity="0..*" />
|
||||
</UML:Association.connection>
|
||||
</UML:Association>
|
||||
<UML:Class isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="KCAGyFqIpgL0" isRoot="false" isAbstract="false" name="HostPool" >
|
||||
<UML:GeneralizableElement.generalization>
|
||||
<UML:Generalization xmi.idref="udobO5QNil4Q" />
|
||||
</UML:GeneralizableElement.generalization>
|
||||
</UML:Class>
|
||||
<UML:Generalization isSpecification="false" child="KCAGyFqIpgL0" visibility="public" namespace="Logical View" xmi.id="udobO5QNil4Q" parent="QzClxwWHdfMc" discriminator="" name="" />
|
||||
<UML:Class isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="7a8pQxuHOv3I" isRoot="false" isAbstract="false" name="Host" >
|
||||
<UML:GeneralizableElement.generalization>
|
||||
<UML:Generalization xmi.idref="JLylJCkYo23X" />
|
||||
</UML:GeneralizableElement.generalization>
|
||||
<UML:Classifier.feature>
|
||||
<UML:Attribute isSpecification="false" visibility="private" xmi.id="I1swDie713Rd" type="HyJpS3PRU1Kj" name="host_share" />
|
||||
<UML:Attribute isSpecification="false" visibility="private" xmi.id="c5qYO6nEljFF" type="bqKIZpHLv42H" name="hid" />
|
||||
<UML:Attribute isSpecification="false" visibility="private" xmi.id="1MY8bxtpD5th" type="XnOFdBKmjtR7" name="state" />
|
||||
<UML:Attribute isSpecification="false" visibility="private" xmi.id="8OIBpnNF0XZq" type="bqKIZpHLv42H" name="priority" />
|
||||
<UML:Attribute isSpecification="false" visibility="private" xmi.id="VbsVKF15i6Mi" type="EnOdbIq8WtLj" name="architecture" />
|
||||
<UML:Attribute isSpecification="false" visibility="private" xmi.id="ew8zcUmtkgcP" type="EnOdbIq8WtLj" name="os_name" />
|
||||
<UML:Attribute isSpecification="false" visibility="private" xmi.id="3PdGaDlK2Uzr" type="bqKIZpHLv42H" name="total_memory" />
|
||||
<UML:Attribute isSpecification="false" visibility="private" xmi.id="H7cCa0QFpDNG" type="bqKIZpHLv42H" name="total_cpu" />
|
||||
<UML:Attribute isSpecification="false" visibility="private" xmi.id="w8devVikl5py" type="bqKIZpHLv42H" name="total_disk" />
|
||||
<UML:Attribute isSpecification="false" visibility="private" xmi.id="DXMEN8pii4Cj" type="EnOdbIq8WtLj" name="host_name" />
|
||||
<UML:Attribute isSpecification="false" visibility="private" xmi.id="PZA3dkog5B6m" type="EnOdbIq8WtLj" name="hsids" />
|
||||
<UML:Attribute isSpecification="false" visibility="private" xmi.id="lX5LM8I9rtTK" type="EnOdbIq8WtLj" name="im_mad_name" />
|
||||
<UML:Attribute isSpecification="false" visibility="private" xmi.id="6mT8lxAGFePd" type="EnOdbIq8WtLj" name="vmm_mad_name" />
|
||||
<UML:Attribute isSpecification="false" visibility="private" xmi.id="nDXK70d0bxjQ" type="EnOdbIq8WtLj" name="tm_mad_name" />
|
||||
<UML:Attribute isSpecification="false" visibility="private" xmi.id="7VpVPFUEJehC" type="bqKIZpHLv42H" name="last_monitored" />
|
||||
<UML:Attribute isSpecification="false" visibility="private" xmi.id="nBB6uMUPKrXW" type="BKzfuxuVlEmK" name="managed" />
|
||||
<UML:Attribute isSpecification="false" visibility="private" xmi.id="3BzSn2NOZCa5" type="bqKIZpHLv42H" name="used_cpu" />
|
||||
<UML:Attribute isSpecification="false" visibility="private" xmi.id="j8n0ANGE2Flw" type="bqKIZpHLv42H" name="used_mem" />
|
||||
<UML:Attribute isSpecification="false" visibility="private" xmi.id="L6SuSVdW2yf9" type="bqKIZpHLv42H" name="total_tx" />
|
||||
<UML:Attribute isSpecification="false" visibility="private" xmi.id="UQv6vjPbRSak" type="bqKIZpHLv42H" name="total_rx" />
|
||||
<UML:Operation isSpecification="false" isLeaf="false" visibility="public" xmi.id="3hebSdUOoDAF" isRoot="false" isAbstract="false" isQuery="false" name="select" >
|
||||
<UML:BehavioralFeature.parameter>
|
||||
<UML:Parameter isSpecification="false" visibility="private" xmi.id="a1xZbOKW0R5l" value="" type="FRk6rIA1W1VM" name="db" />
|
||||
</UML:BehavioralFeature.parameter>
|
||||
</UML:Operation>
|
||||
<UML:Operation isSpecification="false" isLeaf="false" visibility="public" xmi.id="4ICQgXHT7GOe" isRoot="false" isAbstract="false" isQuery="false" name="insert" >
|
||||
<UML:BehavioralFeature.parameter>
|
||||
<UML:Parameter isSpecification="false" visibility="private" xmi.id="fy1W6wbM6z0d" value="" type="FRk6rIA1W1VM" name="db" />
|
||||
</UML:BehavioralFeature.parameter>
|
||||
</UML:Operation>
|
||||
</UML:Classifier.feature>
|
||||
</UML:Class>
|
||||
<UML:Generalization isSpecification="false" child="7a8pQxuHOv3I" visibility="public" namespace="Logical View" xmi.id="JLylJCkYo23X" parent="FTcjgY1ruC0v" discriminator="" name="" />
|
||||
<UML:Class isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="HyJpS3PRU1Kj" isRoot="false" isAbstract="false" name="HostShare" >
|
||||
<UML:Classifier.feature>
|
||||
<UML:Attribute isSpecification="false" visibility="private" xmi.id="Ohg27xO6qIdN" type="EnOdbIq8WtLj" name="endpoint" />
|
||||
<UML:Attribute isSpecification="false" visibility="private" xmi.id="BkamrGWMLBTQ" type="bqKIZpHLv42H" name="disk_usage" />
|
||||
<UML:Attribute isSpecification="false" visibility="private" xmi.id="GvkksWUTDab7" type="bqKIZpHLv42H" name="mem_usage" />
|
||||
<UML:Attribute isSpecification="false" visibility="private" xmi.id="cthYsJ7wlMRC" type="bqKIZpHLv42H" name="cpu_usage" />
|
||||
<UML:Attribute isSpecification="false" visibility="private" xmi.id="IdzKZvzzWd9Q" type="bqKIZpHLv42H" name="running_vms" />
|
||||
<UML:Attribute isSpecification="false" visibility="private" xmi.id="FNiVnWcqKBZV" type="bqKIZpHLv42H" name="max_cpu" />
|
||||
<UML:Attribute isSpecification="false" visibility="private" xmi.id="32EW7SZjmCLV" type="bqKIZpHLv42H" name="max_disk" />
|
||||
<UML:Attribute isSpecification="false" visibility="private" xmi.id="Mbi2hAylDV96" type="bqKIZpHLv42H" name="max_mem" />
|
||||
</UML:Classifier.feature>
|
||||
</UML:Class>
|
||||
<UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="Kq40rRjmpqxB" name="" >
|
||||
<UML:Association.connection>
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="gOcLS1EuyN17" aggregation="composite" type="HyJpS3PRU1Kj" name="" />
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="SQxJtbAK679L" aggregation="none" type="7a8pQxuHOv3I" name="" />
|
||||
</UML:Association.connection>
|
||||
</UML:Association>
|
||||
<UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="F77Ohxt9mWLc" name="" >
|
||||
<UML:Association.connection>
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="NrPthDxNz2o9" aggregation="composite" type="HyJpS3PRU1Kj" name="" />
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="ro3FF4GWsGTe" aggregation="none" type="7a8pQxuHOv3I" name="" />
|
||||
</UML:Association.connection>
|
||||
</UML:Association>
|
||||
<UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="SlsDHDpgpvdB" name="" >
|
||||
<UML:Association.connection>
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="xfx7DdZofIoE" aggregation="composite" type="7a8pQxuHOv3I" name="" />
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="AJ4UUFRFEDAt" aggregation="none" type="HyJpS3PRU1Kj" name="template" multiplicity="1" />
|
||||
</UML:Association.connection>
|
||||
</UML:Association>
|
||||
<UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="XhoKcPVkULbi" name="" >
|
||||
<UML:Association.connection>
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="rcaHLoglzNyt" aggregation="composite" type="7a8pQxuHOv3I" name="" />
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="kTqu5N5FjK3w" aggregation="none" type="vy53e946a47C" name="history" multiplicity="1" />
|
||||
</UML:Association.connection>
|
||||
</UML:Association>
|
||||
<UML:Class isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="m0Kw7a2RrIht" isRoot="false" isAbstract="false" name="time_t" />
|
||||
<UML:Enumeration stereotype="enum" isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="XnOFdBKmjtR7" isRoot="false" isAbstract="false" name="HOST_STATE" >
|
||||
<UML:EnumerationLiteral isSpecification="false" isLeaf="false" visibility="public" namespace="XnOFdBKmjtR7" xmi.id="ZrmvfBSRZf4i" isRoot="false" isAbstract="false" name="HOST_STATE_INIT" />
|
||||
<UML:EnumerationLiteral isSpecification="false" isLeaf="false" visibility="public" namespace="XnOFdBKmjtR7" xmi.id="Y7c7TYooZL09" isRoot="false" isAbstract="false" name="HOST_STATE_MONITORING" />
|
||||
<UML:EnumerationLiteral isSpecification="false" isLeaf="false" visibility="public" namespace="XnOFdBKmjtR7" xmi.id="ElBpOUB6gSC0" isRoot="false" isAbstract="false" name="HOST_STATE_MONITORED" />
|
||||
</UML:Enumeration>
|
||||
<UML:Class isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="qTRhqpQ0PE3f" isRoot="false" isAbstract="false" name="map" />
|
||||
<UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="NbGlbdxcIjX9" name="" >
|
||||
<UML:Association.connection>
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="false" xmi.id="nuWa8QAqGKwa" aggregation="none" type="KCAGyFqIpgL0" name="" />
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="9KjGADpQa3uX" aggregation="none" type="7a8pQxuHOv3I" name="" />
|
||||
</UML:Association.connection>
|
||||
</UML:Association>
|
||||
<UML:Class isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="ypAsly1Z2KtR" isRoot="false" isAbstract="false" name="pthread_mutex_t" />
|
||||
</UML:Namespace.ownedElement>
|
||||
<XMI.extension xmi.extender="umbrello" >
|
||||
<diagrams>
|
||||
<diagram snapgrid="1" showattsig="1" fillcolor="#e0e4c5" linewidth="0" zoom="100" showgrid="1" showopsig="1" usefillcolor="1" snapx="7" canvaswidth="993" snapy="7" showatts="1" xmi.id="DpoC0D4VUaxG" documentation="" type="1" showops="1" showpackage="0" name="HostPool" localid="" showstereotype="0" showscope="1" snapcsgrid="0" font="Bitstream Vera Sans,8,-1,5,50,0,0,0,0,0" linecolor="#312e2a" canvasheight="664" >
|
||||
<widgets>
|
||||
<classwidget usesdiagramfillcolor="0" width="161" showattsigs="601" x="427" fillcolor="#e0e4c5" y="28" showopsigs="601" linewidth="none" height="105" usefillcolor="1" showpubliconly="0" showattributes="1" isinstance="0" xmi.id="FTcjgY1ruC0v" showoperations="1" showpackage="0" showscope="1" usesdiagramusefillcolor="0" font="Bitstream Vera Sans,8,-1,5,50,0,0,0,0,0" linecolor="#312e2a" />
|
||||
<classwidget usesdiagramfillcolor="0" width="234" showattsigs="601" x="21" fillcolor="#e0e4c5" y="21" showopsigs="601" linewidth="none" height="120" usefillcolor="1" showpubliconly="0" showattributes="1" isinstance="0" xmi.id="QzClxwWHdfMc" showoperations="1" showpackage="0" showscope="1" usesdiagramusefillcolor="0" font="Bitstream Vera Sans,8,-1,5,50,0,0,0,0,0" linecolor="#312e2a" />
|
||||
<classwidget usesdiagramfillcolor="1" width="58" showattsigs="601" x="112" fillcolor="none" y="238" showopsigs="601" linewidth="none" height="21" usefillcolor="1" showpubliconly="0" showattributes="1" isinstance="0" xmi.id="KCAGyFqIpgL0" showoperations="1" showpackage="0" showscope="1" usesdiagramusefillcolor="1" font="Bitstream Vera Sans,8,-1,5,50,0,0,0,0,0" linecolor="none" />
|
||||
<classwidget usesdiagramfillcolor="0" width="126" showattsigs="601" x="364" fillcolor="#e0e4c5" y="203" showopsigs="601" linewidth="none" height="253" usefillcolor="1" showpubliconly="0" showattributes="1" isinstance="0" xmi.id="7a8pQxuHOv3I" showoperations="1" showpackage="0" showscope="1" usesdiagramusefillcolor="0" font="Bitstream Vera Sans,8,-1,5,75,0,0,0,0,0" linecolor="#312e2a" />
|
||||
<classwidget usesdiagramfillcolor="0" width="97" showattsigs="601" x="672" fillcolor="#e0e4c5" y="168" showopsigs="601" linewidth="none" height="104" usefillcolor="1" showpubliconly="0" showattributes="1" isinstance="0" xmi.id="HyJpS3PRU1Kj" showoperations="1" showpackage="0" showscope="1" usesdiagramusefillcolor="0" font="Bitstream Vera Sans,8,-1,5,50,0,0,0,0,0" linecolor="#312e2a" />
|
||||
<enumwidget usesdiagramfillcolor="0" width="121" x="301" fillcolor="#e0e4c5" y="504" linewidth="none" height="55" usefillcolor="1" isinstance="0" xmi.id="XnOFdBKmjtR7" showpackage="0" usesdiagramusefillcolor="0" font="Bitstream Vera Sans,8,-1,5,50,0,0,0,0,0" linecolor="#312e2a" />
|
||||
</widgets>
|
||||
<messages/>
|
||||
<associations>
|
||||
<assocwidget totalcounta="2" indexa="1" totalcountb="2" indexb="1" linewidth="none" widgetbid="FTcjgY1ruC0v" widgetaid="QzClxwWHdfMc" xmi.id="fvsi8gCLNwfR" type="501" linecolor="none" >
|
||||
<linepath>
|
||||
<startpoint startx="255" starty="84" />
|
||||
<endpoint endx="427" endy="84" />
|
||||
</linepath>
|
||||
<floatingtext usesdiagramfillcolor="1" width="29" x="399" fillcolor="none" y="63" linewidth="none" posttext="" role="702" height="19" usefillcolor="1" pretext="" isinstance="0" xmi.id="uyQdns50vpfI" text="0..*" usesdiagramusefillcolor="1" font="Bitstream Vera Sans,8,-1,5,50,0,0,0,0,0" linecolor="none" />
|
||||
<floatingtext usesdiagramfillcolor="1" width="36" x="392" fillcolor="none" y="84" linewidth="none" posttext="" role="710" height="19" usefillcolor="1" pretext="-" isinstance="0" xmi.id="YMYpRtoUa25V" text="pool" usesdiagramusefillcolor="1" font="Bitstream Vera Sans,8,-1,5,50,0,0,0,0,0" linecolor="none" />
|
||||
</assocwidget>
|
||||
<assocwidget totalcounta="2" indexa="1" totalcountb="2" indexb="1" linewidth="none" widgetbid="QzClxwWHdfMc" widgetaid="KCAGyFqIpgL0" xmi.id="udobO5QNil4Q" type="500" linecolor="none" >
|
||||
<linepath>
|
||||
<startpoint startx="140" starty="238" />
|
||||
<endpoint endx="140" endy="141" />
|
||||
</linepath>
|
||||
</assocwidget>
|
||||
<assocwidget totalcounta="2" indexa="1" totalcountb="2" indexb="1" linewidth="none" widgetbid="FTcjgY1ruC0v" widgetaid="7a8pQxuHOv3I" xmi.id="JLylJCkYo23X" type="500" linecolor="none" >
|
||||
<linepath>
|
||||
<startpoint startx="427" starty="203" />
|
||||
<endpoint endx="511" endy="133" />
|
||||
</linepath>
|
||||
</assocwidget>
|
||||
<assocwidget totalcounta="2" indexa="1" totalcountb="2" indexb="1" linewidth="none" widgetbid="7a8pQxuHOv3I" widgetaid="KCAGyFqIpgL0" xmi.id="NbGlbdxcIjX9" type="512" linecolor="none" >
|
||||
<linepath>
|
||||
<startpoint startx="170" starty="252" />
|
||||
<endpoint endx="364" endy="329" />
|
||||
</linepath>
|
||||
</assocwidget>
|
||||
<assocwidget totalcounta="2" indexa="1" visibilityB="200" totalcountb="2" indexb="1" linewidth="none" widgetbid="HyJpS3PRU1Kj" widgetaid="7a8pQxuHOv3I" xmi.id="I1swDie713Rd" type="510" changeabilityA="900" changeabilityB="900" linecolor="none" visibilityA="200" >
|
||||
<linepath>
|
||||
<startpoint startx="490" starty="329" />
|
||||
<endpoint endx="672" endy="224" />
|
||||
</linepath>
|
||||
<floatingtext usesdiagramfillcolor="1" width="56" x="616" fillcolor="none" y="224" linewidth="none" posttext="" role="710" height="15" usefillcolor="1" pretext="-" isinstance="0" xmi.id="9YakJSgfC0iP" text="host_share" usesdiagramusefillcolor="1" font="Bitstream Vera Sans,8,-1,5,50,0,0,0,0,0" linecolor="none" />
|
||||
</assocwidget>
|
||||
<assocwidget totalcounta="2" indexa="1" visibilityB="200" totalcountb="2" indexb="1" linewidth="none" widgetbid="XnOFdBKmjtR7" widgetaid="7a8pQxuHOv3I" xmi.id="1MY8bxtpD5th" type="510" changeabilityA="900" changeabilityB="900" linecolor="none" visibilityA="200" >
|
||||
<linepath>
|
||||
<startpoint startx="427" starty="456" />
|
||||
<endpoint endx="364" endy="504" />
|
||||
</linepath>
|
||||
<floatingtext usesdiagramfillcolor="1" width="32" x="364" fillcolor="none" y="490" linewidth="none" posttext="" role="710" height="15" usefillcolor="1" pretext="-" isinstance="0" xmi.id="6Mg8rN6UOOPH" text="state" usesdiagramusefillcolor="1" font="Bitstream Vera Sans,8,-1,5,50,0,0,0,0,0" linecolor="none" />
|
||||
</assocwidget>
|
||||
</associations>
|
||||
</diagram>
|
||||
</diagrams>
|
||||
</XMI.extension>
|
||||
</UML:Model>
|
||||
<UML:Model stereotype="folder" isSpecification="false" isLeaf="false" visibility="public" namespace="m1" xmi.id="Use Case View" isRoot="false" isAbstract="false" name="Use Case View" >
|
||||
<UML:Namespace.ownedElement/>
|
||||
</UML:Model>
|
||||
<UML:Model stereotype="folder" isSpecification="false" isLeaf="false" visibility="public" namespace="m1" xmi.id="Component View" isRoot="false" isAbstract="false" name="Component View" >
|
||||
<UML:Namespace.ownedElement/>
|
||||
</UML:Model>
|
||||
<UML:Model stereotype="folder" isSpecification="false" isLeaf="false" visibility="public" namespace="m1" xmi.id="Deployment View" isRoot="false" isAbstract="false" name="Deployment View" >
|
||||
<UML:Namespace.ownedElement/>
|
||||
</UML:Model>
|
||||
<UML:Model stereotype="folder" isSpecification="false" isLeaf="false" visibility="public" namespace="m1" xmi.id="Entity Relationship Model" isRoot="false" isAbstract="false" name="Entity Relationship Model" >
|
||||
<UML:Namespace.ownedElement/>
|
||||
</UML:Model>
|
||||
</UML:Namespace.ownedElement>
|
||||
</UML:Model>
|
||||
</XMI.content>
|
||||
<XMI.extensions xmi.extender="umbrello" >
|
||||
<docsettings viewid="DpoC0D4VUaxG" documentation="" uniqueid="UQv6vjPbRSak" />
|
||||
<listview>
|
||||
<listitem open="1" type="800" label="Views" >
|
||||
<listitem open="1" type="801" id="Logical View" >
|
||||
<listitem open="0" type="807" id="DpoC0D4VUaxG" label="HostPool" />
|
||||
<listitem open="1" type="813" id="7a8pQxuHOv3I" >
|
||||
<listitem open="0" type="814" id="I1swDie713Rd" />
|
||||
<listitem open="0" type="814" id="c5qYO6nEljFF" />
|
||||
<listitem open="0" type="814" id="1MY8bxtpD5th" />
|
||||
<listitem open="1" type="814" id="8OIBpnNF0XZq" />
|
||||
<listitem open="1" type="814" id="VbsVKF15i6Mi" />
|
||||
<listitem open="1" type="814" id="ew8zcUmtkgcP" />
|
||||
<listitem open="1" type="814" id="3PdGaDlK2Uzr" />
|
||||
<listitem open="1" type="814" id="H7cCa0QFpDNG" />
|
||||
<listitem open="1" type="814" id="w8devVikl5py" />
|
||||
<listitem open="1" type="814" id="DXMEN8pii4Cj" />
|
||||
<listitem open="1" type="814" id="PZA3dkog5B6m" />
|
||||
<listitem open="1" type="814" id="lX5LM8I9rtTK" />
|
||||
<listitem open="1" type="814" id="6mT8lxAGFePd" />
|
||||
<listitem open="1" type="814" id="nDXK70d0bxjQ" />
|
||||
<listitem open="1" type="814" id="7VpVPFUEJehC" />
|
||||
<listitem open="1" type="814" id="nBB6uMUPKrXW" />
|
||||
<listitem open="1" type="814" id="3BzSn2NOZCa5" />
|
||||
<listitem open="1" type="814" id="j8n0ANGE2Flw" />
|
||||
<listitem open="1" type="814" id="L6SuSVdW2yf9" />
|
||||
<listitem open="1" type="814" id="UQv6vjPbRSak" />
|
||||
<listitem open="0" type="815" id="3hebSdUOoDAF" />
|
||||
<listitem open="0" type="815" id="4ICQgXHT7GOe" />
|
||||
</listitem>
|
||||
<listitem open="1" type="813" id="KCAGyFqIpgL0" />
|
||||
<listitem open="1" type="813" id="HyJpS3PRU1Kj" >
|
||||
<listitem open="1" type="814" id="Ohg27xO6qIdN" />
|
||||
<listitem open="1" type="814" id="BkamrGWMLBTQ" />
|
||||
<listitem open="1" type="814" id="GvkksWUTDab7" />
|
||||
<listitem open="1" type="814" id="cthYsJ7wlMRC" />
|
||||
<listitem open="1" type="814" id="IdzKZvzzWd9Q" />
|
||||
<listitem open="1" type="814" id="FNiVnWcqKBZV" />
|
||||
<listitem open="1" type="814" id="32EW7SZjmCLV" />
|
||||
<listitem open="1" type="814" id="Mbi2hAylDV96" />
|
||||
</listitem>
|
||||
<listitem open="0" type="813" id="FTcjgY1ruC0v" >
|
||||
<listitem open="0" type="814" id="1oS3xv31KiB4" />
|
||||
<listitem open="0" type="814" id="ixTgs2fhSgcN" />
|
||||
<listitem open="0" type="815" id="nbM2o3ajdhrk" />
|
||||
<listitem open="0" type="815" id="cYMrUig7UHTW" />
|
||||
<listitem open="0" type="815" id="IDwc2QJgWnvx" />
|
||||
<listitem open="0" type="815" id="M1RmI6G51EM0" />
|
||||
</listitem>
|
||||
<listitem open="0" type="813" id="QzClxwWHdfMc" >
|
||||
<listitem open="0" type="814" id="ufg9C6NNEIhF" />
|
||||
<listitem open="0" type="814" id="FZr0VlUmM86y" />
|
||||
<listitem open="0" type="814" id="ItJ2xkSJdUgP" />
|
||||
<listitem open="0" type="815" id="nTmQ2dvvUMVn" />
|
||||
<listitem open="0" type="815" id="vcv2H4PsHW1N" />
|
||||
<listitem open="0" type="815" id="tZBwi4Zb7qdU" />
|
||||
<listitem open="0" type="815" id="4HEQcydWqn6n" />
|
||||
</listitem>
|
||||
<listitem open="1" type="813" id="qTRhqpQ0PE3f" />
|
||||
<listitem open="1" type="813" id="ypAsly1Z2KtR" />
|
||||
<listitem open="1" type="813" id="m0Kw7a2RrIht" />
|
||||
<listitem open="1" type="830" id="Datatypes" >
|
||||
<listitem open="0" type="829" id="XMIKc2o5J6Nu" />
|
||||
<listitem open="1" type="829" id="XNuw315mXeUm" />
|
||||
<listitem open="1" type="829" id="BKzfuxuVlEmK" />
|
||||
<listitem open="1" type="829" id="oRTstiC5X0HW" />
|
||||
<listitem open="1" type="829" id="Nu2tsIN4aMhU" />
|
||||
<listitem open="1" type="829" id="41ex5eEr4fjx" />
|
||||
<listitem open="1" type="829" id="bqKIZpHLv42H" />
|
||||
<listitem open="1" type="829" id="c2eghLb5Fcw6" />
|
||||
<listitem open="0" type="829" id="WUJUz2wkP4qL" />
|
||||
<listitem open="1" type="829" id="mxryNx8LdqSJ" />
|
||||
<listitem open="1" type="829" id="GEL6a9ZVYNMe" />
|
||||
<listitem open="1" type="829" id="Hby3oiLsjxpm" />
|
||||
<listitem open="0" type="829" id="FRk6rIA1W1VM" />
|
||||
<listitem open="1" type="829" id="EnOdbIq8WtLj" />
|
||||
<listitem open="0" type="829" id="vy53e946a47C" />
|
||||
<listitem open="1" type="829" id="sJASdpuvRqwF" />
|
||||
<listitem open="1" type="829" id="x2fBcbHSsPuV" />
|
||||
<listitem open="1" type="829" id="WF5DDs0nucRc" />
|
||||
</listitem>
|
||||
<listitem open="1" type="831" id="XnOFdBKmjtR7" >
|
||||
<listitem open="0" type="839" id="ZrmvfBSRZf4i" />
|
||||
<listitem open="1" type="839" id="Y7c7TYooZL09" />
|
||||
<listitem open="1" type="839" id="ElBpOUB6gSC0" />
|
||||
</listitem>
|
||||
</listitem>
|
||||
<listitem open="1" type="802" id="Use Case View" />
|
||||
<listitem open="1" type="821" id="Component View" />
|
||||
<listitem open="1" type="827" id="Deployment View" />
|
||||
<listitem open="1" type="836" id="Entity Relationship Model" />
|
||||
</listitem>
|
||||
</listview>
|
||||
<codegeneration>
|
||||
<codegenerator language="C++" />
|
||||
</codegeneration>
|
||||
</XMI.extensions>
|
||||
</XMI>
|
401
share/doc/design/VMPool.xmi
Normal file
401
share/doc/design/VMPool.xmi
Normal file
@ -0,0 +1,401 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<XMI xmlns:UML="http://schema.omg.org/spec/UML/1.3" verified="false" timestamp="2008-01-08T18:45:28" xmi.version="1.2" >
|
||||
<XMI.header>
|
||||
<XMI.documentation>
|
||||
<XMI.exporter>umbrello uml modeller http://uml.sf.net</XMI.exporter>
|
||||
<XMI.exporterVersion>1.5.8</XMI.exporterVersion>
|
||||
<XMI.exporterEncoding>UnicodeUTF8</XMI.exporterEncoding>
|
||||
</XMI.documentation>
|
||||
<XMI.metamodel xmi.name="UML" href="UML.xml" xmi.version="1.3" />
|
||||
</XMI.header>
|
||||
<XMI.content>
|
||||
<UML:Model isSpecification="false" isLeaf="false" isRoot="false" xmi.id="m1" isAbstract="false" name="UML Model" >
|
||||
<UML:Namespace.ownedElement>
|
||||
<UML:Stereotype isSpecification="false" isLeaf="false" visibility="public" namespace="m1" xmi.id="folder" isRoot="false" isAbstract="false" name="folder" />
|
||||
<UML:Stereotype isSpecification="false" isLeaf="false" visibility="public" namespace="m1" xmi.id="datatype" isRoot="false" isAbstract="false" name="datatype" />
|
||||
<UML:Stereotype isSpecification="false" isLeaf="false" visibility="public" namespace="m1" xmi.id="interface" isRoot="false" isAbstract="false" name="interface" />
|
||||
<UML:Stereotype isSpecification="false" isLeaf="false" visibility="public" namespace="m1" xmi.id="ActionListener" isRoot="false" isAbstract="false" name="ActionListener" />
|
||||
<UML:Stereotype isSpecification="false" isLeaf="false" visibility="public" namespace="m1" xmi.id="enum" isRoot="false" isAbstract="false" name="enum" />
|
||||
<UML:Model stereotype="folder" isSpecification="false" isLeaf="false" visibility="public" namespace="m1" xmi.id="Logical View" isRoot="false" isAbstract="false" name="Logical View" >
|
||||
<UML:Namespace.ownedElement>
|
||||
<UML:Package stereotype="folder" isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="Datatypes" isRoot="false" isAbstract="false" name="Datatypes" >
|
||||
<UML:Namespace.ownedElement>
|
||||
<UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="bqKIZpHLv42H" isRoot="false" isAbstract="false" name="int" />
|
||||
<UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="oRTstiC5X0HW" isRoot="false" isAbstract="false" name="char" />
|
||||
<UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="BKzfuxuVlEmK" isRoot="false" isAbstract="false" name="bool" />
|
||||
<UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="41ex5eEr4fjx" isRoot="false" isAbstract="false" name="float" />
|
||||
<UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="Nu2tsIN4aMhU" isRoot="false" isAbstract="false" name="double" />
|
||||
<UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="Hby3oiLsjxpm" isRoot="false" isAbstract="false" name="short" />
|
||||
<UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="c2eghLb5Fcw6" isRoot="false" isAbstract="false" name="long" />
|
||||
<UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="sJASdpuvRqwF" isRoot="false" isAbstract="false" name="unsigned int" />
|
||||
<UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="WF5DDs0nucRc" isRoot="false" isAbstract="false" name="unsigned short" />
|
||||
<UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="x2fBcbHSsPuV" isRoot="false" isAbstract="false" name="unsigned long" />
|
||||
<UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="EnOdbIq8WtLj" isRoot="false" isAbstract="false" name="string" />
|
||||
<UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="FRk6rIA1W1VM" isRoot="false" isAbstract="false" name="sqlite3 *" elementReference="vy53e946a47C" />
|
||||
<UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="XMIKc2o5J6Nu" isRoot="false" isAbstract="false" name="ActionListener *" elementReference="Vtec6OvZep7Y" />
|
||||
<UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="WUJUz2wkP4qL" isRoot="false" isAbstract="false" name="map<int,ObjectSQL*>" elementReference="vy53e946a47C" />
|
||||
<UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="XNuw315mXeUm" isRoot="false" isAbstract="false" name="ObjectSQL *" />
|
||||
<UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="vy53e946a47C" isRoot="false" isAbstract="false" name="undef" >
|
||||
<UML:GeneralizableElement.generalization>
|
||||
<UML:Generalization xmi.idref="KOw9slpUVSCK" />
|
||||
</UML:GeneralizableElement.generalization>
|
||||
</UML:DataType>
|
||||
<UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="mxryNx8LdqSJ" isRoot="false" isAbstract="false" name="map<int,attribute>" elementReference="qTRhqpQ0PE3f" />
|
||||
</UML:Namespace.ownedElement>
|
||||
</UML:Package>
|
||||
<UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="ruL8hEHJf71m" name="" >
|
||||
<UML:Association.connection>
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="Ey5lLInyFHny" aggregation="composite" type="vy53e946a47C" name="" />
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="IW4Y59NNj5Y0" aggregation="none" type="vy53e946a47C" name="" />
|
||||
</UML:Association.connection>
|
||||
</UML:Association>
|
||||
<UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="hjipPCuUAVPQ" name="" >
|
||||
<UML:Association.connection>
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="t70rqsOLcB4D" aggregation="composite" type="vy53e946a47C" name="" multiplicity="1" />
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="pomXSGmN0UGE" aggregation="none" type="vy53e946a47C" name="" multiplicity="0..*" />
|
||||
</UML:Association.connection>
|
||||
</UML:Association>
|
||||
<UML:Abstraction isSpecification="false" visibility="public" namespace="Logical View" xmi.id="DCXqsURB7Car" client="vy53e946a47C" name="" supplier="vy53e946a47C" />
|
||||
<UML:Abstraction isSpecification="false" visibility="public" namespace="Logical View" xmi.id="VvRc5zSWiu2N" client="vy53e946a47C" name="" supplier="vy53e946a47C" />
|
||||
<UML:Abstraction isSpecification="false" visibility="public" namespace="Logical View" xmi.id="Gq5yk7K4083P" client="vy53e946a47C" name="" supplier="vy53e946a47C" />
|
||||
<UML:Abstraction isSpecification="false" visibility="public" namespace="Logical View" xmi.id="eHdeNg3WcYlX" client="vy53e946a47C" name="" supplier="vy53e946a47C" />
|
||||
<UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="Are2UTPMWnQH" name="" >
|
||||
<UML:Association.connection>
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="wwSEMtYIQ3jL" aggregation="composite" type="vy53e946a47C" name="" />
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="pTCzinvJrzop" aggregation="none" type="vy53e946a47C" name="" />
|
||||
</UML:Association.connection>
|
||||
</UML:Association>
|
||||
<UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="CwDiWUhJndUK" name="" >
|
||||
<UML:Association.connection>
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="xciNhaVKc8O3" aggregation="composite" type="vy53e946a47C" name="" />
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="yjL4CImnzST6" aggregation="none" type="vy53e946a47C" name="" />
|
||||
</UML:Association.connection>
|
||||
</UML:Association>
|
||||
<UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="ZPsL0MdKjRuq" name="" >
|
||||
<UML:Association.connection>
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="9ppHyHe9yp6q" aggregation="composite" type="vy53e946a47C" name="" />
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="dsLsyo1muqsZ" aggregation="none" type="vy53e946a47C" name="" />
|
||||
</UML:Association.connection>
|
||||
</UML:Association>
|
||||
<UML:Generalization isSpecification="false" child="vy53e946a47C" visibility="public" namespace="Logical View" xmi.id="KOw9slpUVSCK" parent="vy53e946a47C" discriminator="" name="" />
|
||||
<UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="Zew276Kva1UC" name="" >
|
||||
<UML:Association.connection>
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="w2BKFRSqPCfQ" aggregation="composite" type="vy53e946a47C" name="" />
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="8NXXWAQ2BIwv" aggregation="none" type="vy53e946a47C" name="" />
|
||||
</UML:Association.connection>
|
||||
</UML:Association>
|
||||
<UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="8OffyHH7J51e" name="" >
|
||||
<UML:Association.connection>
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="CY6TqvjeSHn9" aggregation="composite" type="vy53e946a47C" name="" />
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="ipd3MrpSTGbB" aggregation="none" type="vy53e946a47C" name="" />
|
||||
</UML:Association.connection>
|
||||
</UML:Association>
|
||||
<UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="rLzAQznN0fxo" name="" >
|
||||
<UML:Association.connection>
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="vW0absjbmJZV" aggregation="composite" type="vy53e946a47C" name="" />
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="NmS5afCq8lRz" aggregation="none" type="vy53e946a47C" name="" multiplicity="2" />
|
||||
</UML:Association.connection>
|
||||
</UML:Association>
|
||||
<UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="N2IAYOSx9uEH" name="" >
|
||||
<UML:Association.connection>
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="fF0degv5IQ7W" aggregation="composite" type="Vtec6OvZep7Y" name="" />
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="RiLxnrrfdpDV" aggregation="none" type="vy53e946a47C" name="" />
|
||||
</UML:Association.connection>
|
||||
</UML:Association>
|
||||
<UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="adQpG9tPizWw" name="" >
|
||||
<UML:Association.connection>
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="DxU2SBXeiSIL" aggregation="composite" type="vy53e946a47C" name="" />
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="rXiKwgeYgnHy" aggregation="none" type="Vtec6OvZep7Y" name="" />
|
||||
</UML:Association.connection>
|
||||
</UML:Association>
|
||||
<UML:Abstraction isSpecification="false" visibility="public" namespace="Logical View" xmi.id="iNuf7uC50BLw" client="vy53e946a47C" name="" supplier="Vtec6OvZep7Y" />
|
||||
<UML:Class isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="FTcjgY1ruC0v" isRoot="false" isAbstract="false" name="ObjectSQL" >
|
||||
<UML:Classifier.feature>
|
||||
<UML:Attribute isSpecification="false" visibility="private" xmi.id="1oS3xv31KiB4" type="bqKIZpHLv42H" name="oid" />
|
||||
<UML:Attribute isSpecification="false" visibility="private" xmi.id="ixTgs2fhSgcN" type="ypAsly1Z2KtR" name="mutex" />
|
||||
<UML:Operation isSpecification="false" isLeaf="false" visibility="public" xmi.id="nbM2o3ajdhrk" isRoot="false" isAbstract="false" isQuery="false" name="lock" />
|
||||
<UML:Operation isSpecification="false" isLeaf="false" visibility="public" xmi.id="cYMrUig7UHTW" isRoot="false" isAbstract="false" isQuery="false" name="unlock" />
|
||||
<UML:Operation isSpecification="false" isLeaf="false" visibility="public" xmi.id="IDwc2QJgWnvx" isRoot="false" isAbstract="true" isQuery="false" name="select" >
|
||||
<UML:BehavioralFeature.parameter>
|
||||
<UML:Parameter isSpecification="false" visibility="private" xmi.id="XAJL1i0cYd38" value="" type="FRk6rIA1W1VM" name="db" />
|
||||
</UML:BehavioralFeature.parameter>
|
||||
</UML:Operation>
|
||||
<UML:Operation isSpecification="false" isLeaf="false" visibility="public" xmi.id="M1RmI6G51EM0" isRoot="false" isAbstract="true" isQuery="false" name="insert" >
|
||||
<UML:BehavioralFeature.parameter>
|
||||
<UML:Parameter isSpecification="false" visibility="private" xmi.id="t0UviVXF8YLM" value="" type="FRk6rIA1W1VM" name="db" />
|
||||
</UML:BehavioralFeature.parameter>
|
||||
</UML:Operation>
|
||||
</UML:Classifier.feature>
|
||||
</UML:Class>
|
||||
<UML:Class isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="QzClxwWHdfMc" isRoot="false" isAbstract="false" name="PoolSQL" >
|
||||
<UML:Classifier.feature>
|
||||
<UML:Attribute isSpecification="false" visibility="private" xmi.id="ufg9C6NNEIhF" type="bqKIZpHLv42H" name="lastOID" />
|
||||
<UML:Attribute isSpecification="false" visibility="private" xmi.id="FZr0VlUmM86y" type="WUJUz2wkP4qL" name="pool" />
|
||||
<UML:Attribute isSpecification="false" visibility="private" xmi.id="ItJ2xkSJdUgP" type="FRk6rIA1W1VM" name="db" />
|
||||
<UML:Operation isSpecification="false" isLeaf="false" visibility="private" xmi.id="nTmQ2dvvUMVn" isRoot="false" isAbstract="true" isQuery="false" name="initLastOID" />
|
||||
<UML:Operation isSpecification="false" isLeaf="false" visibility="private" xmi.id="vcv2H4PsHW1N" isRoot="false" isAbstract="true" isQuery="false" name="create" >
|
||||
<UML:BehavioralFeature.parameter>
|
||||
<UML:Parameter kind="return" xmi.id="xOMjFuuBaxiB" type="XNuw315mXeUm" />
|
||||
</UML:BehavioralFeature.parameter>
|
||||
</UML:Operation>
|
||||
<UML:Operation isSpecification="false" isLeaf="false" visibility="public" xmi.id="tZBwi4Zb7qdU" isRoot="false" isAbstract="false" isQuery="false" name="allocate" >
|
||||
<UML:BehavioralFeature.parameter>
|
||||
<UML:Parameter kind="return" xmi.id="caYspxUlaybN" type="bqKIZpHLv42H" />
|
||||
<UML:Parameter isSpecification="false" visibility="private" xmi.id="gGjXn5Sh8Rku" value="" type="XNuw315mXeUm" name="obj" />
|
||||
</UML:BehavioralFeature.parameter>
|
||||
</UML:Operation>
|
||||
<UML:Operation isSpecification="false" isLeaf="false" visibility="public" xmi.id="4HEQcydWqn6n" isRoot="false" isAbstract="false" isQuery="false" name="get" >
|
||||
<UML:BehavioralFeature.parameter>
|
||||
<UML:Parameter kind="return" xmi.id="XWMuNb4DpWFh" type="XNuw315mXeUm" />
|
||||
<UML:Parameter isSpecification="false" visibility="private" xmi.id="JCfn5YzTBFJW" value="" type="bqKIZpHLv42H" name="oid" />
|
||||
<UML:Parameter isSpecification="false" visibility="private" xmi.id="rGU4tF7PEYbS" value="" type="BKzfuxuVlEmK" name="lock" />
|
||||
</UML:BehavioralFeature.parameter>
|
||||
</UML:Operation>
|
||||
</UML:Classifier.feature>
|
||||
</UML:Class>
|
||||
<UML:Dependency isSpecification="false" visibility="public" namespace="Logical View" xmi.id="3a0CTjhkgTis" client="QzClxwWHdfMc" name="" supplier="FTcjgY1ruC0v" />
|
||||
<UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="fvsi8gCLNwfR" name="" >
|
||||
<UML:Association.connection>
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="MZQH9S6RVac4" aggregation="aggregate" type="QzClxwWHdfMc" name="" />
|
||||
<UML:AssociationEnd isSpecification="false" visibility="private" changeability="changeable" isNavigable="true" xmi.id="oFyIp4OZKzFo" aggregation="none" type="FTcjgY1ruC0v" name="pool" multiplicity="0..*" />
|
||||
</UML:Association.connection>
|
||||
</UML:Association>
|
||||
<UML:Class isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="KCAGyFqIpgL0" isRoot="false" isAbstract="false" name="VMPool" >
|
||||
<UML:GeneralizableElement.generalization>
|
||||
<UML:Generalization xmi.idref="udobO5QNil4Q" />
|
||||
</UML:GeneralizableElement.generalization>
|
||||
</UML:Class>
|
||||
<UML:Generalization isSpecification="false" child="KCAGyFqIpgL0" visibility="public" namespace="Logical View" xmi.id="udobO5QNil4Q" parent="QzClxwWHdfMc" discriminator="" name="" />
|
||||
<UML:Class isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="7a8pQxuHOv3I" isRoot="false" isAbstract="false" name="VM" >
|
||||
<UML:GeneralizableElement.generalization>
|
||||
<UML:Generalization xmi.idref="JLylJCkYo23X" />
|
||||
</UML:GeneralizableElement.generalization>
|
||||
<UML:Classifier.feature>
|
||||
<UML:Attribute isSpecification="false" visibility="public" xmi.id="I1swDie713Rd" type="HyJpS3PRU1Kj" name="template" />
|
||||
<UML:Attribute isSpecification="false" visibility="public" xmi.id="qJQVdL68irlQ" type="z7Dg2MlvQ7CM" name="history" />
|
||||
<UML:Attribute isSpecification="false" visibility="public" xmi.id="c5qYO6nEljFF" type="bqKIZpHLv42H" name="uid" />
|
||||
<UML:Attribute isSpecification="false" visibility="public" xmi.id="C2CvmPBZYxhn" type="EnOdbIq8WtLj" name="directory" />
|
||||
<UML:Attribute isSpecification="false" visibility="private" xmi.id="1MY8bxtpD5th" type="XnOFdBKmjtR7" name="state" />
|
||||
<UML:Operation isSpecification="false" isLeaf="false" visibility="public" xmi.id="3hebSdUOoDAF" isRoot="false" isAbstract="false" isQuery="false" name="select" >
|
||||
<UML:BehavioralFeature.parameter>
|
||||
<UML:Parameter isSpecification="false" visibility="private" xmi.id="a1xZbOKW0R5l" value="" type="FRk6rIA1W1VM" name="db" />
|
||||
</UML:BehavioralFeature.parameter>
|
||||
</UML:Operation>
|
||||
<UML:Operation isSpecification="false" isLeaf="false" visibility="public" xmi.id="4ICQgXHT7GOe" isRoot="false" isAbstract="false" isQuery="false" name="insert" >
|
||||
<UML:BehavioralFeature.parameter>
|
||||
<UML:Parameter isSpecification="false" visibility="private" xmi.id="fy1W6wbM6z0d" value="" type="FRk6rIA1W1VM" name="db" />
|
||||
</UML:BehavioralFeature.parameter>
|
||||
</UML:Operation>
|
||||
</UML:Classifier.feature>
|
||||
</UML:Class>
|
||||
<UML:Generalization isSpecification="false" child="7a8pQxuHOv3I" visibility="public" namespace="Logical View" xmi.id="JLylJCkYo23X" parent="FTcjgY1ruC0v" discriminator="" name="" />
|
||||
<UML:Class isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="z7Dg2MlvQ7CM" isRoot="false" isAbstract="false" name="History" >
|
||||
<UML:Classifier.feature>
|
||||
<UML:Attribute isSpecification="false" visibility="private" xmi.id="QcFMJ056hrSv" type="m0Kw7a2RrIht" name="stime" />
|
||||
<UML:Attribute isSpecification="false" visibility="private" xmi.id="x7VATmBXqsOJ" type="m0Kw7a2RrIht" name="etime" />
|
||||
</UML:Classifier.feature>
|
||||
</UML:Class>
|
||||
<UML:Class isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="HyJpS3PRU1Kj" isRoot="false" isAbstract="false" name="Template" >
|
||||
<UML:Classifier.feature>
|
||||
<UML:Attribute isSpecification="false" visibility="private" xmi.id="Q6C0ik7hGMJ2" type="mxryNx8LdqSJ" name="attributes" />
|
||||
</UML:Classifier.feature>
|
||||
</UML:Class>
|
||||
<UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="Kq40rRjmpqxB" name="" >
|
||||
<UML:Association.connection>
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="6FSgChUMdImU" aggregation="composite" type="HyJpS3PRU1Kj" name="" />
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="ndt0GI7PQQkO" aggregation="none" type="7a8pQxuHOv3I" name="" />
|
||||
</UML:Association.connection>
|
||||
</UML:Association>
|
||||
<UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="F77Ohxt9mWLc" name="" >
|
||||
<UML:Association.connection>
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="Cp1L23UGtWQW" aggregation="composite" type="HyJpS3PRU1Kj" name="" />
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="GAdHYqgiWLGy" aggregation="none" type="7a8pQxuHOv3I" name="" />
|
||||
</UML:Association.connection>
|
||||
</UML:Association>
|
||||
<UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="SlsDHDpgpvdB" name="" >
|
||||
<UML:Association.connection>
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="FVOSlmKjyrEr" aggregation="composite" type="7a8pQxuHOv3I" name="" />
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="h87eqS5e2ZUi" aggregation="none" type="HyJpS3PRU1Kj" name="template" multiplicity="1" />
|
||||
</UML:Association.connection>
|
||||
</UML:Association>
|
||||
<UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="XhoKcPVkULbi" name="" >
|
||||
<UML:Association.connection>
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="TKlURUryaXiL" aggregation="composite" type="7a8pQxuHOv3I" name="" />
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="iY5AbiDqiqfV" aggregation="none" type="z7Dg2MlvQ7CM" name="history" multiplicity="1" />
|
||||
</UML:Association.connection>
|
||||
</UML:Association>
|
||||
<UML:Class isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="m0Kw7a2RrIht" isRoot="false" isAbstract="false" name="time_t" />
|
||||
<UML:Enumeration stereotype="enum" isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="XnOFdBKmjtR7" isRoot="false" isAbstract="false" name="VM_STATE" >
|
||||
<UML:EnumerationLiteral isSpecification="false" isLeaf="false" visibility="public" namespace="XnOFdBKmjtR7" xmi.id="ZrmvfBSRZf4i" isRoot="false" isAbstract="false" name="LM_STATE_INIT" />
|
||||
<UML:EnumerationLiteral isSpecification="false" isLeaf="false" visibility="public" namespace="XnOFdBKmjtR7" xmi.id="Pk8VgQdGINBv" isRoot="false" isAbstract="false" name="LM_STATE_PENDING" />
|
||||
<UML:EnumerationLiteral isSpecification="false" isLeaf="false" visibility="public" namespace="XnOFdBKmjtR7" xmi.id="j0GohzR4iZYO" isRoot="false" isAbstract="false" name="LM_STATE_ACTIVE" />
|
||||
</UML:Enumeration>
|
||||
<UML:Class isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="qTRhqpQ0PE3f" isRoot="false" isAbstract="false" name="map" />
|
||||
<UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="NbGlbdxcIjX9" name="" >
|
||||
<UML:Association.connection>
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="false" xmi.id="5tEmoStyUmnN" aggregation="none" type="KCAGyFqIpgL0" name="" />
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="LNUHBovFFXaw" aggregation="none" type="7a8pQxuHOv3I" name="" />
|
||||
</UML:Association.connection>
|
||||
</UML:Association>
|
||||
<UML:Class isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="ypAsly1Z2KtR" isRoot="false" isAbstract="false" name="pthread_mutex_t" />
|
||||
</UML:Namespace.ownedElement>
|
||||
<XMI.extension xmi.extender="umbrello" >
|
||||
<diagrams>
|
||||
<diagram snapgrid="1" showattsig="1" fillcolor="#e0e4c5" linewidth="0" zoom="100" showgrid="1" showopsig="1" usefillcolor="1" snapx="7" canvaswidth="993" snapy="7" showatts="1" xmi.id="DpoC0D4VUaxG" documentation="" type="1" showops="1" showpackage="0" name="VMpool" localid="" showstereotype="0" showscope="1" snapcsgrid="0" font="Bitstream Vera Sans,8,-1,5,50,0,0,0,0,0" linecolor="#312e2a" canvasheight="664" >
|
||||
<widgets>
|
||||
<classwidget usesdiagramfillcolor="0" width="161" showattsigs="601" x="427" fillcolor="#e0e4c5" y="28" showopsigs="601" linewidth="none" height="105" usefillcolor="1" showpubliconly="0" showattributes="1" isinstance="0" xmi.id="FTcjgY1ruC0v" showoperations="1" showpackage="0" showscope="1" usesdiagramusefillcolor="0" font="Bitstream Vera Sans,8,-1,5,50,0,0,0,0,0" linecolor="#312e2a" />
|
||||
<classwidget usesdiagramfillcolor="0" width="234" showattsigs="601" x="21" fillcolor="#e0e4c5" y="21" showopsigs="601" linewidth="none" height="120" usefillcolor="1" showpubliconly="0" showattributes="1" isinstance="0" xmi.id="QzClxwWHdfMc" showoperations="1" showpackage="0" showscope="1" usesdiagramusefillcolor="0" font="Bitstream Vera Sans,8,-1,5,50,0,0,0,0,0" linecolor="#312e2a" />
|
||||
<classwidget usesdiagramfillcolor="1" width="59" showattsigs="601" x="112" fillcolor="none" y="238" showopsigs="601" linewidth="none" height="29" usefillcolor="1" showpubliconly="0" showattributes="1" isinstance="0" xmi.id="KCAGyFqIpgL0" showoperations="1" showpackage="0" showscope="1" usesdiagramusefillcolor="1" font="Bitstream Vera Sans,8,-1,5,50,0,0,0,0,0" linecolor="none" />
|
||||
<classwidget usesdiagramfillcolor="0" width="139" showattsigs="601" x="441" fillcolor="#e0e4c5" y="189" showopsigs="601" linewidth="none" height="120" usefillcolor="1" showpubliconly="0" showattributes="1" isinstance="0" xmi.id="7a8pQxuHOv3I" showoperations="1" showpackage="0" showscope="1" usesdiagramusefillcolor="0" font="Bitstream Vera Sans,8,-1,5,50,0,0,0,0,0" linecolor="#312e2a" />
|
||||
<classwidget usesdiagramfillcolor="0" width="98" showattsigs="601" x="672" fillcolor="#e0e4c5" y="308" showopsigs="601" linewidth="none" height="52" usefillcolor="1" showpubliconly="0" showattributes="1" isinstance="0" xmi.id="z7Dg2MlvQ7CM" showoperations="1" showpackage="0" showscope="1" usesdiagramusefillcolor="0" font="Bitstream Vera Sans,8,-1,5,50,0,0,0,0,0" linecolor="#312e2a" />
|
||||
<classwidget usesdiagramfillcolor="0" width="195" showattsigs="601" x="602" fillcolor="#e0e4c5" y="140" showopsigs="601" linewidth="none" height="37" usefillcolor="1" showpubliconly="0" showattributes="1" isinstance="0" xmi.id="HyJpS3PRU1Kj" showoperations="1" showpackage="0" showscope="1" usesdiagramusefillcolor="0" font="Bitstream Vera Sans,8,-1,5,50,0,0,0,0,0" linecolor="#312e2a" />
|
||||
<enumwidget usesdiagramfillcolor="0" width="123" x="448" fillcolor="#e0e4c5" y="364" linewidth="none" height="75" usefillcolor="1" isinstance="0" xmi.id="XnOFdBKmjtR7" showpackage="0" usesdiagramusefillcolor="0" font="Bitstream Vera Sans,8,-1,5,50,0,0,0,0,0" linecolor="#312e2a" />
|
||||
</widgets>
|
||||
<messages/>
|
||||
<associations>
|
||||
<assocwidget totalcounta="2" indexa="1" totalcountb="2" indexb="1" linewidth="none" widgetbid="FTcjgY1ruC0v" widgetaid="QzClxwWHdfMc" xmi.id="fvsi8gCLNwfR" type="501" linecolor="none" >
|
||||
<linepath>
|
||||
<startpoint startx="255" starty="84" />
|
||||
<endpoint endx="427" endy="84" />
|
||||
</linepath>
|
||||
<floatingtext usesdiagramfillcolor="1" width="29" x="399" fillcolor="none" y="63" linewidth="none" posttext="" role="702" height="19" usefillcolor="1" pretext="" isinstance="0" xmi.id="DNaVZpTHlJ2S" text="0..*" usesdiagramusefillcolor="1" font="Bitstream Vera Sans,8,-1,5,50,0,0,0,0,0" linecolor="none" />
|
||||
<floatingtext usesdiagramfillcolor="1" width="36" x="392" fillcolor="none" y="84" linewidth="none" posttext="" role="710" height="19" usefillcolor="1" pretext="-" isinstance="0" xmi.id="YGEiGDNWDMDo" text="pool" usesdiagramusefillcolor="1" font="Bitstream Vera Sans,8,-1,5,50,0,0,0,0,0" linecolor="none" />
|
||||
</assocwidget>
|
||||
<assocwidget totalcounta="2" indexa="1" totalcountb="2" indexb="1" linewidth="none" widgetbid="QzClxwWHdfMc" widgetaid="KCAGyFqIpgL0" xmi.id="udobO5QNil4Q" type="500" linecolor="none" >
|
||||
<linepath>
|
||||
<startpoint startx="140" starty="238" />
|
||||
<endpoint endx="140" endy="141" />
|
||||
</linepath>
|
||||
</assocwidget>
|
||||
<assocwidget totalcounta="2" indexa="1" totalcountb="2" indexb="1" linewidth="none" widgetbid="FTcjgY1ruC0v" widgetaid="7a8pQxuHOv3I" xmi.id="JLylJCkYo23X" type="500" linecolor="none" >
|
||||
<linepath>
|
||||
<startpoint startx="511" starty="189" />
|
||||
<endpoint endx="511" endy="133" />
|
||||
</linepath>
|
||||
</assocwidget>
|
||||
<assocwidget totalcounta="3" indexa="1" visibilityB="200" totalcountb="2" indexb="1" linewidth="none" widgetbid="HyJpS3PRU1Kj" widgetaid="7a8pQxuHOv3I" xmi.id="I1swDie713Rd" type="510" changeabilityA="900" changeabilityB="900" linecolor="none" visibilityA="200" >
|
||||
<linepath>
|
||||
<startpoint startx="580" starty="231" />
|
||||
<endpoint endx="700" endy="177" />
|
||||
</linepath>
|
||||
<floatingtext usesdiagramfillcolor="1" width="67" x="630" fillcolor="none" y="196" linewidth="none" posttext="" role="710" height="19" usefillcolor="1" pretext="+" isinstance="0" xmi.id="CAbVsOU3KZoC" text="template" usesdiagramusefillcolor="1" font="Bitstream Vera Sans,8,-1,5,50,0,0,0,0,0" linecolor="none" />
|
||||
</assocwidget>
|
||||
<assocwidget totalcounta="3" indexa="2" visibilityB="200" totalcountb="2" indexb="1" linewidth="none" widgetbid="z7Dg2MlvQ7CM" widgetaid="7a8pQxuHOv3I" xmi.id="qJQVdL68irlQ" type="510" changeabilityA="900" changeabilityB="900" linecolor="none" visibilityA="200" >
|
||||
<linepath>
|
||||
<startpoint startx="580" starty="273" />
|
||||
<endpoint endx="672" endy="336" />
|
||||
</linepath>
|
||||
<floatingtext usesdiagramfillcolor="1" width="56" x="623" fillcolor="none" y="315" linewidth="none" posttext="" role="710" height="19" usefillcolor="1" pretext="+" isinstance="0" xmi.id="7A7CSsqNaEFk" text="history" usesdiagramusefillcolor="1" font="Bitstream Vera Sans,8,-1,5,50,0,0,0,0,0" linecolor="none" />
|
||||
</assocwidget>
|
||||
<assocwidget totalcounta="2" indexa="1" visibilityB="200" totalcountb="2" indexb="1" linewidth="none" widgetbid="XnOFdBKmjtR7" widgetaid="7a8pQxuHOv3I" xmi.id="1MY8bxtpD5th" type="510" changeabilityA="900" changeabilityB="900" linecolor="none" visibilityA="200" >
|
||||
<linepath>
|
||||
<startpoint startx="511" starty="309" />
|
||||
<endpoint endx="511" endy="364" />
|
||||
</linepath>
|
||||
<floatingtext usesdiagramfillcolor="1" width="41" x="476" fillcolor="none" y="343" linewidth="none" posttext="" role="710" height="19" usefillcolor="1" pretext="-" isinstance="0" xmi.id="tObHmtqUK95f" text="state" usesdiagramusefillcolor="1" font="Bitstream Vera Sans,8,-1,5,50,0,0,0,0,0" linecolor="none" />
|
||||
</assocwidget>
|
||||
<assocwidget totalcounta="2" indexa="1" totalcountb="2" indexb="1" linewidth="none" widgetbid="7a8pQxuHOv3I" widgetaid="KCAGyFqIpgL0" xmi.id="NbGlbdxcIjX9" type="512" linecolor="none" >
|
||||
<linepath>
|
||||
<startpoint startx="171" starty="252" />
|
||||
<endpoint endx="441" endy="252" />
|
||||
</linepath>
|
||||
</assocwidget>
|
||||
</associations>
|
||||
</diagram>
|
||||
</diagrams>
|
||||
</XMI.extension>
|
||||
</UML:Model>
|
||||
<UML:Model stereotype="folder" isSpecification="false" isLeaf="false" visibility="public" namespace="m1" xmi.id="Use Case View" isRoot="false" isAbstract="false" name="Use Case View" >
|
||||
<UML:Namespace.ownedElement/>
|
||||
</UML:Model>
|
||||
<UML:Model stereotype="folder" isSpecification="false" isLeaf="false" visibility="public" namespace="m1" xmi.id="Component View" isRoot="false" isAbstract="false" name="Component View" >
|
||||
<UML:Namespace.ownedElement/>
|
||||
</UML:Model>
|
||||
<UML:Model stereotype="folder" isSpecification="false" isLeaf="false" visibility="public" namespace="m1" xmi.id="Deployment View" isRoot="false" isAbstract="false" name="Deployment View" >
|
||||
<UML:Namespace.ownedElement/>
|
||||
</UML:Model>
|
||||
<UML:Model stereotype="folder" isSpecification="false" isLeaf="false" visibility="public" namespace="m1" xmi.id="Entity Relationship Model" isRoot="false" isAbstract="false" name="Entity Relationship Model" >
|
||||
<UML:Namespace.ownedElement/>
|
||||
</UML:Model>
|
||||
</UML:Namespace.ownedElement>
|
||||
</UML:Model>
|
||||
</XMI.content>
|
||||
<XMI.extensions xmi.extender="umbrello" >
|
||||
<docsettings viewid="DpoC0D4VUaxG" documentation="" uniqueid="JJLpsPtBWM5U" />
|
||||
<listview>
|
||||
<listitem open="1" type="800" label="Views" >
|
||||
<listitem open="1" type="801" id="Logical View" >
|
||||
<listitem open="0" type="807" id="DpoC0D4VUaxG" label="VMpool" />
|
||||
<listitem open="0" type="813" id="z7Dg2MlvQ7CM" >
|
||||
<listitem open="0" type="814" id="QcFMJ056hrSv" />
|
||||
<listitem open="0" type="814" id="x7VATmBXqsOJ" />
|
||||
</listitem>
|
||||
<listitem open="0" type="813" id="FTcjgY1ruC0v" >
|
||||
<listitem open="0" type="814" id="1oS3xv31KiB4" />
|
||||
<listitem open="0" type="814" id="ixTgs2fhSgcN" />
|
||||
<listitem open="0" type="815" id="nbM2o3ajdhrk" />
|
||||
<listitem open="0" type="815" id="cYMrUig7UHTW" />
|
||||
<listitem open="0" type="815" id="IDwc2QJgWnvx" />
|
||||
<listitem open="0" type="815" id="M1RmI6G51EM0" />
|
||||
</listitem>
|
||||
<listitem open="0" type="813" id="QzClxwWHdfMc" >
|
||||
<listitem open="0" type="814" id="ufg9C6NNEIhF" />
|
||||
<listitem open="0" type="814" id="FZr0VlUmM86y" />
|
||||
<listitem open="0" type="814" id="ItJ2xkSJdUgP" />
|
||||
<listitem open="0" type="815" id="nTmQ2dvvUMVn" />
|
||||
<listitem open="0" type="815" id="vcv2H4PsHW1N" />
|
||||
<listitem open="0" type="815" id="tZBwi4Zb7qdU" />
|
||||
<listitem open="0" type="815" id="4HEQcydWqn6n" />
|
||||
</listitem>
|
||||
<listitem open="0" type="813" id="HyJpS3PRU1Kj" >
|
||||
<listitem open="0" type="814" id="Q6C0ik7hGMJ2" />
|
||||
</listitem>
|
||||
<listitem open="0" type="813" id="7a8pQxuHOv3I" >
|
||||
<listitem open="0" type="814" id="I1swDie713Rd" />
|
||||
<listitem open="0" type="814" id="qJQVdL68irlQ" />
|
||||
<listitem open="0" type="814" id="c5qYO6nEljFF" />
|
||||
<listitem open="0" type="814" id="C2CvmPBZYxhn" />
|
||||
<listitem open="0" type="814" id="1MY8bxtpD5th" />
|
||||
<listitem open="0" type="815" id="3hebSdUOoDAF" />
|
||||
<listitem open="0" type="815" id="4ICQgXHT7GOe" />
|
||||
</listitem>
|
||||
<listitem open="1" type="813" id="KCAGyFqIpgL0" />
|
||||
<listitem open="1" type="813" id="qTRhqpQ0PE3f" />
|
||||
<listitem open="1" type="813" id="ypAsly1Z2KtR" />
|
||||
<listitem open="1" type="813" id="m0Kw7a2RrIht" />
|
||||
<listitem open="0" type="830" id="Datatypes" >
|
||||
<listitem open="1" type="829" id="XMIKc2o5J6Nu" />
|
||||
<listitem open="1" type="829" id="XNuw315mXeUm" />
|
||||
<listitem open="1" type="829" id="BKzfuxuVlEmK" />
|
||||
<listitem open="1" type="829" id="oRTstiC5X0HW" />
|
||||
<listitem open="1" type="829" id="Nu2tsIN4aMhU" />
|
||||
<listitem open="1" type="829" id="41ex5eEr4fjx" />
|
||||
<listitem open="1" type="829" id="bqKIZpHLv42H" />
|
||||
<listitem open="1" type="829" id="c2eghLb5Fcw6" />
|
||||
<listitem open="0" type="829" id="WUJUz2wkP4qL" />
|
||||
<listitem open="1" type="829" id="mxryNx8LdqSJ" />
|
||||
<listitem open="1" type="829" id="Hby3oiLsjxpm" />
|
||||
<listitem open="0" type="829" id="FRk6rIA1W1VM" />
|
||||
<listitem open="1" type="829" id="EnOdbIq8WtLj" />
|
||||
<listitem open="0" type="829" id="vy53e946a47C" />
|
||||
<listitem open="1" type="829" id="sJASdpuvRqwF" />
|
||||
<listitem open="1" type="829" id="x2fBcbHSsPuV" />
|
||||
<listitem open="1" type="829" id="WF5DDs0nucRc" />
|
||||
</listitem>
|
||||
<listitem open="0" type="831" id="XnOFdBKmjtR7" >
|
||||
<listitem open="0" type="839" id="ZrmvfBSRZf4i" />
|
||||
<listitem open="0" type="839" id="Pk8VgQdGINBv" />
|
||||
<listitem open="0" type="839" id="j0GohzR4iZYO" />
|
||||
</listitem>
|
||||
</listitem>
|
||||
<listitem open="1" type="802" id="Use Case View" />
|
||||
<listitem open="1" type="821" id="Component View" />
|
||||
<listitem open="1" type="827" id="Deployment View" />
|
||||
<listitem open="1" type="836" id="Entity Relationship Model" />
|
||||
</listitem>
|
||||
</listview>
|
||||
<codegeneration>
|
||||
<codegenerator language="C++" />
|
||||
</codegeneration>
|
||||
</XMI.extensions>
|
||||
</XMI>
|
297
share/doc/design/action manager.xmi
Normal file
297
share/doc/design/action manager.xmi
Normal file
@ -0,0 +1,297 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<XMI xmlns:UML="http://schema.omg.org/spec/UML/1.3" verified="false" timestamp="2008-01-08T18:43:54" xmi.version="1.2" >
|
||||
<XMI.header>
|
||||
<XMI.documentation>
|
||||
<XMI.exporter>umbrello uml modeller http://uml.sf.net</XMI.exporter>
|
||||
<XMI.exporterVersion>1.5.8</XMI.exporterVersion>
|
||||
<XMI.exporterEncoding>UnicodeUTF8</XMI.exporterEncoding>
|
||||
</XMI.documentation>
|
||||
<XMI.metamodel xmi.name="UML" href="UML.xml" xmi.version="1.3" />
|
||||
</XMI.header>
|
||||
<XMI.content>
|
||||
<UML:Model isSpecification="false" isLeaf="false" isRoot="false" xmi.id="m1" isAbstract="false" name="UML Model" >
|
||||
<UML:Namespace.ownedElement>
|
||||
<UML:Stereotype isSpecification="false" isLeaf="false" visibility="public" namespace="m1" xmi.id="folder" isRoot="false" isAbstract="false" name="folder" />
|
||||
<UML:Stereotype isSpecification="false" isLeaf="false" visibility="public" namespace="m1" xmi.id="datatype" isRoot="false" isAbstract="false" name="datatype" />
|
||||
<UML:Stereotype isSpecification="false" isLeaf="false" visibility="public" namespace="m1" xmi.id="interface" isRoot="false" isAbstract="false" name="interface" />
|
||||
<UML:Stereotype isSpecification="false" isLeaf="false" visibility="public" namespace="m1" xmi.id="ActionListener" isRoot="false" isAbstract="false" name="ActionListener" />
|
||||
<UML:Stereotype isSpecification="false" isLeaf="false" visibility="public" namespace="m1" xmi.id="enum" isRoot="false" isAbstract="false" name="enum" />
|
||||
<UML:Model stereotype="folder" isSpecification="false" isLeaf="false" visibility="public" namespace="m1" xmi.id="Logical View" isRoot="false" isAbstract="false" name="Logical View" >
|
||||
<UML:Namespace.ownedElement>
|
||||
<UML:Package stereotype="folder" isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="Datatypes" isRoot="false" isAbstract="false" name="Datatypes" >
|
||||
<UML:Namespace.ownedElement>
|
||||
<UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="bqKIZpHLv42H" isRoot="false" isAbstract="false" name="int" />
|
||||
<UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="oRTstiC5X0HW" isRoot="false" isAbstract="false" name="char" />
|
||||
<UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="BKzfuxuVlEmK" isRoot="false" isAbstract="false" name="bool" />
|
||||
<UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="41ex5eEr4fjx" isRoot="false" isAbstract="false" name="float" />
|
||||
<UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="Nu2tsIN4aMhU" isRoot="false" isAbstract="false" name="double" />
|
||||
<UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="Hby3oiLsjxpm" isRoot="false" isAbstract="false" name="short" />
|
||||
<UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="c2eghLb5Fcw6" isRoot="false" isAbstract="false" name="long" />
|
||||
<UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="sJASdpuvRqwF" isRoot="false" isAbstract="false" name="unsigned int" />
|
||||
<UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="WF5DDs0nucRc" isRoot="false" isAbstract="false" name="unsigned short" />
|
||||
<UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="x2fBcbHSsPuV" isRoot="false" isAbstract="false" name="unsigned long" />
|
||||
<UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="EnOdbIq8WtLj" isRoot="false" isAbstract="false" name="string" />
|
||||
<UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="FRk6rIA1W1VM" isRoot="false" isAbstract="false" name="sqlite3 *" elementReference="vy53e946a47C" />
|
||||
<UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="XMIKc2o5J6Nu" isRoot="false" isAbstract="false" name="ActionListener *" elementReference="Vtec6OvZep7Y" />
|
||||
<UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="WUJUz2wkP4qL" isRoot="false" isAbstract="false" name="map<int,ObjectSQL*>" elementReference="vy53e946a47C" />
|
||||
<UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="XNuw315mXeUm" isRoot="false" isAbstract="false" name="ObjectSQL *" />
|
||||
<UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="vy53e946a47C" isRoot="false" isAbstract="false" name="undef" >
|
||||
<UML:GeneralizableElement.generalization>
|
||||
<UML:Generalization xmi.idref="KOw9slpUVSCK" />
|
||||
</UML:GeneralizableElement.generalization>
|
||||
</UML:DataType>
|
||||
<UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="mxryNx8LdqSJ" isRoot="false" isAbstract="false" name="map<int,attribute>" elementReference="qTRhqpQ0PE3f" />
|
||||
</UML:Namespace.ownedElement>
|
||||
</UML:Package>
|
||||
<UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="ruL8hEHJf71m" name="" >
|
||||
<UML:Association.connection>
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="y5MnbTW68X9I" aggregation="composite" type="vy53e946a47C" name="" />
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="UHm8l0N0c5PE" aggregation="none" type="vy53e946a47C" name="" />
|
||||
</UML:Association.connection>
|
||||
</UML:Association>
|
||||
<UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="hjipPCuUAVPQ" name="" >
|
||||
<UML:Association.connection>
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="P1zbtMv6sByA" aggregation="composite" type="vy53e946a47C" name="" multiplicity="1" />
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="tZb6Wx5n9lft" aggregation="none" type="vy53e946a47C" name="" multiplicity="0..*" />
|
||||
</UML:Association.connection>
|
||||
</UML:Association>
|
||||
<UML:Abstraction isSpecification="false" visibility="public" namespace="Logical View" xmi.id="DCXqsURB7Car" client="vy53e946a47C" name="" supplier="vy53e946a47C" />
|
||||
<UML:Abstraction isSpecification="false" visibility="public" namespace="Logical View" xmi.id="VvRc5zSWiu2N" client="vy53e946a47C" name="" supplier="vy53e946a47C" />
|
||||
<UML:Abstraction isSpecification="false" visibility="public" namespace="Logical View" xmi.id="Gq5yk7K4083P" client="vy53e946a47C" name="" supplier="vy53e946a47C" />
|
||||
<UML:Abstraction isSpecification="false" visibility="public" namespace="Logical View" xmi.id="eHdeNg3WcYlX" client="vy53e946a47C" name="" supplier="vy53e946a47C" />
|
||||
<UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="Are2UTPMWnQH" name="" >
|
||||
<UML:Association.connection>
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="ixBGeyZcPVaF" aggregation="composite" type="vy53e946a47C" name="" />
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="XhM0loRAmqhm" aggregation="none" type="vy53e946a47C" name="" />
|
||||
</UML:Association.connection>
|
||||
</UML:Association>
|
||||
<UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="CwDiWUhJndUK" name="" >
|
||||
<UML:Association.connection>
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="myu9MSPXu29Z" aggregation="composite" type="vy53e946a47C" name="" />
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="JuCTiSs22ALx" aggregation="none" type="vy53e946a47C" name="" />
|
||||
</UML:Association.connection>
|
||||
</UML:Association>
|
||||
<UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="ZPsL0MdKjRuq" name="" >
|
||||
<UML:Association.connection>
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="lsDCzcoNj2O1" aggregation="composite" type="vy53e946a47C" name="" />
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="oDM6oHoLpHfv" aggregation="none" type="vy53e946a47C" name="" />
|
||||
</UML:Association.connection>
|
||||
</UML:Association>
|
||||
<UML:Generalization isSpecification="false" child="vy53e946a47C" visibility="public" namespace="Logical View" xmi.id="KOw9slpUVSCK" parent="vy53e946a47C" discriminator="" name="" />
|
||||
<UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="Zew276Kva1UC" name="" >
|
||||
<UML:Association.connection>
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="S7prGTfHM9JH" aggregation="composite" type="vy53e946a47C" name="" />
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="EDM014vN8URG" aggregation="none" type="vy53e946a47C" name="" />
|
||||
</UML:Association.connection>
|
||||
</UML:Association>
|
||||
<UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="8OffyHH7J51e" name="" >
|
||||
<UML:Association.connection>
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="cCz3x6TxH4uf" aggregation="composite" type="vy53e946a47C" name="" />
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="QvBeUm2Wqtpn" aggregation="none" type="vy53e946a47C" name="" />
|
||||
</UML:Association.connection>
|
||||
</UML:Association>
|
||||
<UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="rLzAQznN0fxo" name="" >
|
||||
<UML:Association.connection>
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="dA46Yap9O5kt" aggregation="composite" type="vy53e946a47C" name="" />
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="ItqmtO3HnbJ9" aggregation="none" type="vy53e946a47C" name="" multiplicity="2" />
|
||||
</UML:Association.connection>
|
||||
</UML:Association>
|
||||
<UML:Interface stereotype="interface" isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="Vtec6OvZep7Y" isRoot="false" isAbstract="true" name="ActionListener" >
|
||||
<UML:Classifier.feature>
|
||||
<UML:Operation isSpecification="false" isLeaf="false" visibility="public" xmi.id="r5wKwYx2uqZZ" isRoot="false" isAbstract="true" isQuery="false" name="do_action" >
|
||||
<UML:BehavioralFeature.parameter>
|
||||
<UML:Parameter isSpecification="false" visibility="private" xmi.id="08TU5pmjXwFJ" value="" type="EnOdbIq8WtLj" name="actionName" />
|
||||
<UML:Parameter isSpecification="false" visibility="private" xmi.id="imunZeU6akNO" value="" type="vy53e946a47C" name="actionArgs" />
|
||||
</UML:BehavioralFeature.parameter>
|
||||
</UML:Operation>
|
||||
</UML:Classifier.feature>
|
||||
</UML:Interface>
|
||||
<UML:Class isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="lSGAN6DHQApL" isRoot="false" isAbstract="false" name="ActionManager" >
|
||||
<UML:Classifier.feature>
|
||||
<UML:Attribute isSpecification="false" visibility="private" xmi.id="PnRpA2YxeF9Y" type="vy53e946a47C" name="actionList" />
|
||||
<UML:Attribute isSpecification="false" visibility="private" xmi.id="THHIdjRDCzRQ" type="XMIKc2o5J6Nu" name="listener" />
|
||||
<UML:Operation isSpecification="false" isLeaf="false" visibility="public" xmi.id="qFxhNZSAMMR4" isRoot="false" isAbstract="false" isQuery="false" name="loop" >
|
||||
<UML:BehavioralFeature.parameter>
|
||||
<UML:Parameter isSpecification="false" visibility="private" xmi.id="rZIavc3WN6NS" value="" type="vy53e946a47C" name="timeout" />
|
||||
<UML:Parameter isSpecification="false" visibility="private" xmi.id="srF5iDwHTUD3" value="" type="vy53e946a47C" name="timerArgs" />
|
||||
</UML:BehavioralFeature.parameter>
|
||||
</UML:Operation>
|
||||
<UML:Operation isSpecification="false" isLeaf="false" visibility="public" xmi.id="MKeaF4nJSUdl" isRoot="false" isAbstract="false" isQuery="false" name="trigger" >
|
||||
<UML:BehavioralFeature.parameter>
|
||||
<UML:Parameter isSpecification="false" visibility="private" xmi.id="EEPPaloeiEww" value="" type="EnOdbIq8WtLj" name="action" />
|
||||
<UML:Parameter isSpecification="false" visibility="private" xmi.id="WG7hKdMiEPZy" value="" type="vy53e946a47C" name="args" />
|
||||
</UML:BehavioralFeature.parameter>
|
||||
</UML:Operation>
|
||||
<UML:Operation isSpecification="false" isLeaf="false" visibility="public" xmi.id="STOhI1BX7rpi" isRoot="false" isAbstract="false" isQuery="false" name="addListener" >
|
||||
<UML:BehavioralFeature.parameter>
|
||||
<UML:Parameter isSpecification="false" visibility="private" xmi.id="CB0SMWSFO6hr" value="" type="XMIKc2o5J6Nu" name="listener" />
|
||||
</UML:BehavioralFeature.parameter>
|
||||
</UML:Operation>
|
||||
</UML:Classifier.feature>
|
||||
</UML:Class>
|
||||
<UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="N2IAYOSx9uEH" name="" >
|
||||
<UML:Association.connection>
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="80tOmUAfejnK" aggregation="composite" type="Vtec6OvZep7Y" name="" />
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="kxz5OIFexF2L" aggregation="none" type="lSGAN6DHQApL" name="" />
|
||||
</UML:Association.connection>
|
||||
</UML:Association>
|
||||
<UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="adQpG9tPizWw" name="" >
|
||||
<UML:Association.connection>
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="04m5CQy8sSYQ" aggregation="composite" type="lSGAN6DHQApL" name="" />
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="NSjaIRk1YKtq" aggregation="none" type="Vtec6OvZep7Y" name="" />
|
||||
</UML:Association.connection>
|
||||
</UML:Association>
|
||||
<UML:Class stereotype="ActionListener" isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="v1Qyt5PysrV2" isRoot="false" isAbstract="false" name="ExampleManager" >
|
||||
<UML:Classifier.feature>
|
||||
<UML:Attribute isSpecification="false" visibility="public" xmi.id="y1DwtRnk4cXj" type="lSGAN6DHQApL" name="am" />
|
||||
<UML:Operation isSpecification="false" isLeaf="false" visibility="public" xmi.id="Wbx0pbNT3TB4" isRoot="false" isAbstract="false" isQuery="false" name="do_action" >
|
||||
<UML:BehavioralFeature.parameter>
|
||||
<UML:Parameter isSpecification="false" visibility="private" xmi.id="1UA1ujuNmUZI" value="" type="EnOdbIq8WtLj" name="actionName" />
|
||||
<UML:Parameter isSpecification="false" visibility="private" xmi.id="AA353JgE6fjG" value="" type="vy53e946a47C" name="actionArgs" />
|
||||
</UML:BehavioralFeature.parameter>
|
||||
</UML:Operation>
|
||||
</UML:Classifier.feature>
|
||||
</UML:Class>
|
||||
<UML:Abstraction isSpecification="false" visibility="public" namespace="Logical View" xmi.id="iNuf7uC50BLw" client="v1Qyt5PysrV2" name="" supplier="Vtec6OvZep7Y" />
|
||||
<UML:Dependency isSpecification="false" visibility="public" namespace="Logical View" xmi.id="3a0CTjhkgTis" client="QzClxwWHdfMc" name="" supplier="FTcjgY1ruC0v" />
|
||||
<UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="fvsi8gCLNwfR" name="" >
|
||||
<UML:Association.connection>
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="pHcGdTyJMRHY" aggregation="aggregate" type="QzClxwWHdfMc" name="" />
|
||||
<UML:AssociationEnd isSpecification="false" visibility="private" changeability="changeable" isNavigable="true" xmi.id="g2xHX9hQszfu" aggregation="none" type="FTcjgY1ruC0v" name="pool" multiplicity="0..*" />
|
||||
</UML:Association.connection>
|
||||
</UML:Association>
|
||||
<UML:Generalization isSpecification="false" child="KCAGyFqIpgL0" visibility="public" namespace="Logical View" xmi.id="udobO5QNil4Q" parent="QzClxwWHdfMc" discriminator="" name="" />
|
||||
<UML:Generalization isSpecification="false" child="7a8pQxuHOv3I" visibility="public" namespace="Logical View" xmi.id="JLylJCkYo23X" parent="FTcjgY1ruC0v" discriminator="" name="" />
|
||||
<UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="Kq40rRjmpqxB" name="" >
|
||||
<UML:Association.connection>
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="mM7lhHvx7C3u" aggregation="composite" type="HyJpS3PRU1Kj" name="" />
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="B8RZZteamulQ" aggregation="none" type="7a8pQxuHOv3I" name="" />
|
||||
</UML:Association.connection>
|
||||
</UML:Association>
|
||||
<UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="F77Ohxt9mWLc" name="" >
|
||||
<UML:Association.connection>
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="t476C0aBezQs" aggregation="composite" type="HyJpS3PRU1Kj" name="" />
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="kEk3hOIYsSk8" aggregation="none" type="7a8pQxuHOv3I" name="" />
|
||||
</UML:Association.connection>
|
||||
</UML:Association>
|
||||
<UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="SlsDHDpgpvdB" name="" >
|
||||
<UML:Association.connection>
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="CD41QniTDdde" aggregation="composite" type="7a8pQxuHOv3I" name="" />
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="ONgum429D1KD" aggregation="none" type="HyJpS3PRU1Kj" name="template" multiplicity="1" />
|
||||
</UML:Association.connection>
|
||||
</UML:Association>
|
||||
<UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="XhoKcPVkULbi" name="" >
|
||||
<UML:Association.connection>
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="qtMAmwmqDsZq" aggregation="composite" type="7a8pQxuHOv3I" name="" />
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="cG8bpFvKzdps" aggregation="none" type="z7Dg2MlvQ7CM" name="history" multiplicity="1" />
|
||||
</UML:Association.connection>
|
||||
</UML:Association>
|
||||
<UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="NbGlbdxcIjX9" name="" >
|
||||
<UML:Association.connection>
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="false" xmi.id="hBfuAUkeKZRm" aggregation="none" type="KCAGyFqIpgL0" name="" />
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="7KWx32Cx0t32" aggregation="none" type="7a8pQxuHOv3I" name="" />
|
||||
</UML:Association.connection>
|
||||
</UML:Association>
|
||||
</UML:Namespace.ownedElement>
|
||||
<XMI.extension xmi.extender="umbrello" >
|
||||
<diagrams>
|
||||
<diagram snapgrid="0" showattsig="1" fillcolor="#eee9e9" linewidth="0" zoom="100" showgrid="1" showopsig="1" usefillcolor="1" snapx="10" canvaswidth="993" snapy="10" showatts="1" xmi.id="tJJXQ7qLTGJd" documentation="" type="1" showops="1" showpackage="0" name="Action" localid="" showstereotype="0" showscope="1" snapcsgrid="0" font="Bitstream Vera Sans,8,-1,5,50,0,0,0,0,0" linecolor="#8b8989" canvasheight="664" >
|
||||
<widgets>
|
||||
<interfacewidget usesdiagramfillcolor="0" width="307" x="387" fillcolor="#eee9e9" y="34" drawascircle="0" showopsigs="601" linewidth="none" height="52" usefillcolor="1" showpubliconly="0" isinstance="0" xmi.id="Vtec6OvZep7Y" showoperations="1" showpackage="0" showscope="1" showstereotype="1" usesdiagramusefillcolor="0" font="Bitstream Vera Sans,8,-1,5,50,0,0,0,0,0" linecolor="#8b8989" />
|
||||
<classwidget usesdiagramfillcolor="0" width="251" showattsigs="601" x="20" fillcolor="#eee9e9" y="15" showopsigs="601" linewidth="none" height="90" usefillcolor="1" showpubliconly="0" showattributes="1" isinstance="0" xmi.id="lSGAN6DHQApL" showoperations="1" showpackage="0" showscope="1" usesdiagramusefillcolor="0" font="Bitstream Vera Sans,8,-1,5,50,0,0,0,0,0" linecolor="#8b8989" />
|
||||
<classwidget usesdiagramfillcolor="0" width="307" showattsigs="601" x="191" fillcolor="#99cccc" y="171" showopsigs="601" linewidth="none" height="57" usefillcolor="1" showpubliconly="0" showattributes="1" isinstance="0" xmi.id="v1Qyt5PysrV2" showoperations="1" showpackage="0" showscope="1" usesdiagramusefillcolor="0" font="Bitstream Vera Sans,8,-1,5,50,0,0,0,0,0" linecolor="#8b8989" />
|
||||
</widgets>
|
||||
<messages/>
|
||||
<associations>
|
||||
<assocwidget totalcounta="2" indexa="1" visibilityB="200" totalcountb="2" indexb="1" linewidth="none" widgetbid="Vtec6OvZep7Y" widgetaid="lSGAN6DHQApL" xmi.id="THHIdjRDCzRQ" type="501" changeabilityA="900" changeabilityB="900" linecolor="none" visibilityA="200" >
|
||||
<linepath>
|
||||
<startpoint startx="271" starty="60" />
|
||||
<endpoint endx="387" endy="60" />
|
||||
</linepath>
|
||||
<floatingtext usesdiagramfillcolor="1" width="30" x="353" fillcolor="none" y="44" linewidth="none" posttext="" role="702" height="19" usefillcolor="1" pretext="" isinstance="0" xmi.id="xQs1zkoMsAff" text="0..1" usesdiagramusefillcolor="1" font="Bitstream Vera Sans,8,-1,5,50,0,0,0,0,0" linecolor="none" />
|
||||
<floatingtext usesdiagramfillcolor="1" width="55" x="330" fillcolor="none" y="61" linewidth="none" posttext="" role="710" height="19" usefillcolor="1" pretext="-" isinstance="0" xmi.id="3d38Z5NBVczd" text="listener" usesdiagramusefillcolor="1" font="Bitstream Vera Sans,8,-1,5,50,0,0,0,0,0" linecolor="none" />
|
||||
</assocwidget>
|
||||
<assocwidget totalcounta="3" indexa="1" visibilityB="200" totalcountb="2" indexb="1" linewidth="none" widgetbid="lSGAN6DHQApL" widgetaid="v1Qyt5PysrV2" xmi.id="y1DwtRnk4cXj" type="510" changeabilityA="900" changeabilityB="900" linecolor="none" visibilityA="200" >
|
||||
<linepath>
|
||||
<startpoint startx="293" starty="171" />
|
||||
<endpoint endx="145" endy="105" />
|
||||
</linepath>
|
||||
<floatingtext usesdiagramfillcolor="1" width="35" x="147" fillcolor="none" y="107" linewidth="none" posttext="" role="710" height="19" usefillcolor="1" pretext="+" isinstance="0" xmi.id="nD19KxipJfeS" text="am" usesdiagramusefillcolor="1" font="Bitstream Vera Sans,8,-1,5,50,0,0,0,0,0" linecolor="none" />
|
||||
</assocwidget>
|
||||
<assocwidget totalcounta="3" indexa="2" totalcountb="2" indexb="1" linewidth="none" widgetbid="Vtec6OvZep7Y" widgetaid="v1Qyt5PysrV2" xmi.id="iNuf7uC50BLw" type="511" linecolor="none" >
|
||||
<linepath>
|
||||
<startpoint startx="395" starty="171" />
|
||||
<endpoint endx="540" endy="86" />
|
||||
</linepath>
|
||||
</assocwidget>
|
||||
</associations>
|
||||
</diagram>
|
||||
</diagrams>
|
||||
</XMI.extension>
|
||||
</UML:Model>
|
||||
<UML:Model stereotype="folder" isSpecification="false" isLeaf="false" visibility="public" namespace="m1" xmi.id="Use Case View" isRoot="false" isAbstract="false" name="Use Case View" >
|
||||
<UML:Namespace.ownedElement/>
|
||||
</UML:Model>
|
||||
<UML:Model stereotype="folder" isSpecification="false" isLeaf="false" visibility="public" namespace="m1" xmi.id="Component View" isRoot="false" isAbstract="false" name="Component View" >
|
||||
<UML:Namespace.ownedElement/>
|
||||
</UML:Model>
|
||||
<UML:Model stereotype="folder" isSpecification="false" isLeaf="false" visibility="public" namespace="m1" xmi.id="Deployment View" isRoot="false" isAbstract="false" name="Deployment View" >
|
||||
<UML:Namespace.ownedElement/>
|
||||
</UML:Model>
|
||||
<UML:Model stereotype="folder" isSpecification="false" isLeaf="false" visibility="public" namespace="m1" xmi.id="Entity Relationship Model" isRoot="false" isAbstract="false" name="Entity Relationship Model" >
|
||||
<UML:Namespace.ownedElement/>
|
||||
</UML:Model>
|
||||
</UML:Namespace.ownedElement>
|
||||
</UML:Model>
|
||||
</XMI.content>
|
||||
<XMI.extensions xmi.extender="umbrello" >
|
||||
<docsettings viewid="tJJXQ7qLTGJd" documentation="" uniqueid="JJLpsPtBWM5U" />
|
||||
<listview>
|
||||
<listitem open="1" type="800" label="Views" >
|
||||
<listitem open="1" type="801" id="Logical View" >
|
||||
<listitem open="0" type="807" id="tJJXQ7qLTGJd" label="Action" />
|
||||
<listitem open="0" type="813" id="lSGAN6DHQApL" >
|
||||
<listitem open="0" type="814" id="PnRpA2YxeF9Y" />
|
||||
<listitem open="0" type="814" id="THHIdjRDCzRQ" />
|
||||
<listitem open="0" type="815" id="qFxhNZSAMMR4" />
|
||||
<listitem open="0" type="815" id="MKeaF4nJSUdl" />
|
||||
<listitem open="0" type="815" id="STOhI1BX7rpi" />
|
||||
</listitem>
|
||||
<listitem open="0" type="813" id="v1Qyt5PysrV2" >
|
||||
<listitem open="0" type="814" id="y1DwtRnk4cXj" />
|
||||
<listitem open="0" type="815" id="Wbx0pbNT3TB4" />
|
||||
</listitem>
|
||||
<listitem open="0" type="817" id="Vtec6OvZep7Y" >
|
||||
<listitem open="0" type="815" id="r5wKwYx2uqZZ" />
|
||||
</listitem>
|
||||
<listitem open="0" type="830" id="Datatypes" >
|
||||
<listitem open="1" type="829" id="XMIKc2o5J6Nu" />
|
||||
<listitem open="1" type="829" id="XNuw315mXeUm" />
|
||||
<listitem open="1" type="829" id="BKzfuxuVlEmK" />
|
||||
<listitem open="1" type="829" id="oRTstiC5X0HW" />
|
||||
<listitem open="1" type="829" id="Nu2tsIN4aMhU" />
|
||||
<listitem open="1" type="829" id="41ex5eEr4fjx" />
|
||||
<listitem open="1" type="829" id="bqKIZpHLv42H" />
|
||||
<listitem open="1" type="829" id="c2eghLb5Fcw6" />
|
||||
<listitem open="0" type="829" id="WUJUz2wkP4qL" />
|
||||
<listitem open="1" type="829" id="mxryNx8LdqSJ" />
|
||||
<listitem open="1" type="829" id="Hby3oiLsjxpm" />
|
||||
<listitem open="0" type="829" id="FRk6rIA1W1VM" />
|
||||
<listitem open="1" type="829" id="EnOdbIq8WtLj" />
|
||||
<listitem open="0" type="829" id="vy53e946a47C" />
|
||||
<listitem open="1" type="829" id="sJASdpuvRqwF" />
|
||||
<listitem open="1" type="829" id="x2fBcbHSsPuV" />
|
||||
<listitem open="1" type="829" id="WF5DDs0nucRc" />
|
||||
</listitem>
|
||||
</listitem>
|
||||
<listitem open="1" type="802" id="Use Case View" />
|
||||
<listitem open="1" type="821" id="Component View" />
|
||||
<listitem open="1" type="827" id="Deployment View" />
|
||||
<listitem open="1" type="836" id="Entity Relationship Model" />
|
||||
</listitem>
|
||||
</listview>
|
||||
<codegeneration>
|
||||
<codegenerator language="C++" />
|
||||
</codegeneration>
|
||||
</XMI.extensions>
|
||||
</XMI>
|
335
share/doc/design/dispatch manager.xmi
Normal file
335
share/doc/design/dispatch manager.xmi
Normal file
@ -0,0 +1,335 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<XMI xmlns:UML="http://schema.omg.org/spec/UML/1.3" verified="false" timestamp="2008-02-18T19:18:04" xmi.version="1.2" >
|
||||
<XMI.header>
|
||||
<XMI.documentation>
|
||||
<XMI.exporter>umbrello uml modeller http://uml.sf.net</XMI.exporter>
|
||||
<XMI.exporterVersion>1.5.8</XMI.exporterVersion>
|
||||
<XMI.exporterEncoding>UnicodeUTF8</XMI.exporterEncoding>
|
||||
</XMI.documentation>
|
||||
<XMI.metamodel xmi.name="UML" href="UML.xml" xmi.version="1.3" />
|
||||
</XMI.header>
|
||||
<XMI.content>
|
||||
<UML:Model isSpecification="false" isLeaf="false" isRoot="false" xmi.id="m1" isAbstract="false" name="UML Model" >
|
||||
<UML:Namespace.ownedElement>
|
||||
<UML:Stereotype isSpecification="false" isLeaf="false" visibility="public" namespace="m1" xmi.id="folder" isRoot="false" isAbstract="false" name="folder" />
|
||||
<UML:Stereotype isSpecification="false" isLeaf="false" visibility="public" namespace="m1" xmi.id="datatype" isRoot="false" isAbstract="false" name="datatype" />
|
||||
<UML:Stereotype isSpecification="false" isLeaf="false" visibility="public" namespace="m1" xmi.id="interface" isRoot="false" isAbstract="false" name="interface" />
|
||||
<UML:Stereotype isSpecification="false" isLeaf="false" visibility="public" namespace="m1" xmi.id="ActionListener" isRoot="false" isAbstract="false" name="ActionListener" />
|
||||
<UML:Stereotype isSpecification="false" isLeaf="false" visibility="public" namespace="m1" xmi.id="enum" isRoot="false" isAbstract="false" name="enum" />
|
||||
<UML:Model stereotype="folder" isSpecification="false" isLeaf="false" visibility="public" namespace="m1" xmi.id="Logical View" isRoot="false" isAbstract="false" name="Logical View" >
|
||||
<UML:Namespace.ownedElement>
|
||||
<UML:Package stereotype="folder" isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="Datatypes" isRoot="false" isAbstract="false" name="Datatypes" >
|
||||
<UML:Namespace.ownedElement>
|
||||
<UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="bqKIZpHLv42H" isRoot="false" isAbstract="false" name="int" />
|
||||
<UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="oRTstiC5X0HW" isRoot="false" isAbstract="false" name="char" />
|
||||
<UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="BKzfuxuVlEmK" isRoot="false" isAbstract="false" name="bool" />
|
||||
<UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="41ex5eEr4fjx" isRoot="false" isAbstract="false" name="float" />
|
||||
<UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="Nu2tsIN4aMhU" isRoot="false" isAbstract="false" name="double" />
|
||||
<UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="Hby3oiLsjxpm" isRoot="false" isAbstract="false" name="short" />
|
||||
<UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="c2eghLb5Fcw6" isRoot="false" isAbstract="false" name="long" />
|
||||
<UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="sJASdpuvRqwF" isRoot="false" isAbstract="false" name="unsigned int" />
|
||||
<UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="WF5DDs0nucRc" isRoot="false" isAbstract="false" name="unsigned short" />
|
||||
<UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="x2fBcbHSsPuV" isRoot="false" isAbstract="false" name="unsigned long" />
|
||||
<UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="EnOdbIq8WtLj" isRoot="false" isAbstract="false" name="string" />
|
||||
<UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="FRk6rIA1W1VM" isRoot="false" isAbstract="false" name="sqlite3 *" elementReference="vy53e946a47C" />
|
||||
<UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="XMIKc2o5J6Nu" isRoot="false" isAbstract="false" name="ActionListener *" elementReference="vy53e946a47C" />
|
||||
<UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="WUJUz2wkP4qL" isRoot="false" isAbstract="false" name="map<int,ObjectSQL*>" elementReference="vy53e946a47C" />
|
||||
<UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="XNuw315mXeUm" isRoot="false" isAbstract="false" name="ObjectSQL *" />
|
||||
<UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="vy53e946a47C" isRoot="false" isAbstract="false" name="undef" >
|
||||
<UML:GeneralizableElement.generalization>
|
||||
<UML:Generalization xmi.idref="KOw9slpUVSCK" />
|
||||
<UML:Generalization xmi.idref="udobO5QNil4Q" />
|
||||
<UML:Generalization xmi.idref="JLylJCkYo23X" />
|
||||
</UML:GeneralizableElement.generalization>
|
||||
</UML:DataType>
|
||||
<UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="mxryNx8LdqSJ" isRoot="false" isAbstract="false" name="map<int,attribute>" elementReference="vy53e946a47C" />
|
||||
</UML:Namespace.ownedElement>
|
||||
</UML:Package>
|
||||
<UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="ruL8hEHJf71m" name="" >
|
||||
<UML:Association.connection>
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="4WdAwUoLZuKn" aggregation="composite" type="vy53e946a47C" name="" />
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="ZQctTq2d6zrP" aggregation="none" type="vy53e946a47C" name="" />
|
||||
</UML:Association.connection>
|
||||
</UML:Association>
|
||||
<UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="hjipPCuUAVPQ" name="" >
|
||||
<UML:Association.connection>
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="HLBhV75ZdihX" aggregation="composite" type="vy53e946a47C" name="" multiplicity="1" />
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="ATsjNCVwa7n1" aggregation="none" type="vy53e946a47C" name="" multiplicity="0..*" />
|
||||
</UML:Association.connection>
|
||||
</UML:Association>
|
||||
<UML:Abstraction isSpecification="false" visibility="public" namespace="Logical View" xmi.id="DCXqsURB7Car" client="vy53e946a47C" name="" supplier="vy53e946a47C" />
|
||||
<UML:Abstraction isSpecification="false" visibility="public" namespace="Logical View" xmi.id="VvRc5zSWiu2N" client="vy53e946a47C" name="" supplier="vy53e946a47C" />
|
||||
<UML:Abstraction isSpecification="false" visibility="public" namespace="Logical View" xmi.id="Gq5yk7K4083P" client="vy53e946a47C" name="" supplier="vy53e946a47C" />
|
||||
<UML:Abstraction isSpecification="false" visibility="public" namespace="Logical View" xmi.id="eHdeNg3WcYlX" client="vy53e946a47C" name="" supplier="vy53e946a47C" />
|
||||
<UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="Are2UTPMWnQH" name="" >
|
||||
<UML:Association.connection>
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="xne1nWR2pajK" aggregation="composite" type="vy53e946a47C" name="" />
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="horIUWpcziJM" aggregation="none" type="vy53e946a47C" name="" />
|
||||
</UML:Association.connection>
|
||||
</UML:Association>
|
||||
<UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="CwDiWUhJndUK" name="" >
|
||||
<UML:Association.connection>
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="soHTu4Sps5rd" aggregation="composite" type="vy53e946a47C" name="" />
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="ZIfOqMgV8Xna" aggregation="none" type="vy53e946a47C" name="" />
|
||||
</UML:Association.connection>
|
||||
</UML:Association>
|
||||
<UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="ZPsL0MdKjRuq" name="" >
|
||||
<UML:Association.connection>
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="1aC0IVM9KdaC" aggregation="composite" type="vy53e946a47C" name="" />
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="g21W5s9e8m0w" aggregation="none" type="vy53e946a47C" name="" />
|
||||
</UML:Association.connection>
|
||||
</UML:Association>
|
||||
<UML:Generalization isSpecification="false" child="vy53e946a47C" visibility="public" namespace="Logical View" xmi.id="KOw9slpUVSCK" parent="vy53e946a47C" discriminator="" name="" />
|
||||
<UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="Zew276Kva1UC" name="" >
|
||||
<UML:Association.connection>
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="8gRGBEoCn0C5" aggregation="composite" type="vy53e946a47C" name="" />
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="TXClAmxopzIu" aggregation="none" type="vy53e946a47C" name="" />
|
||||
</UML:Association.connection>
|
||||
</UML:Association>
|
||||
<UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="8OffyHH7J51e" name="" >
|
||||
<UML:Association.connection>
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="pRXwBXsJEKXP" aggregation="composite" type="vy53e946a47C" name="" />
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="WLaJJmNnJZYS" aggregation="none" type="vy53e946a47C" name="" />
|
||||
</UML:Association.connection>
|
||||
</UML:Association>
|
||||
<UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="rLzAQznN0fxo" name="" >
|
||||
<UML:Association.connection>
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="MWE9TX1IwYC8" aggregation="composite" type="vy53e946a47C" name="" />
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="65PINvftEFBY" aggregation="none" type="vy53e946a47C" name="" multiplicity="2" />
|
||||
</UML:Association.connection>
|
||||
</UML:Association>
|
||||
<UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="N2IAYOSx9uEH" name="" >
|
||||
<UML:Association.connection>
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="0YJH5rhRLwYm" aggregation="composite" type="vy53e946a47C" name="" />
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="Ra3N6FVCItSf" aggregation="none" type="vy53e946a47C" name="" />
|
||||
</UML:Association.connection>
|
||||
</UML:Association>
|
||||
<UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="adQpG9tPizWw" name="" >
|
||||
<UML:Association.connection>
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="o8X2LiaLGrdL" aggregation="composite" type="vy53e946a47C" name="" />
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="hIl2EJndrq1y" aggregation="none" type="vy53e946a47C" name="" />
|
||||
</UML:Association.connection>
|
||||
</UML:Association>
|
||||
<UML:Abstraction isSpecification="false" visibility="public" namespace="Logical View" xmi.id="iNuf7uC50BLw" client="vy53e946a47C" name="" supplier="vy53e946a47C" />
|
||||
<UML:Dependency isSpecification="false" visibility="public" namespace="Logical View" xmi.id="3a0CTjhkgTis" client="vy53e946a47C" name="" supplier="vy53e946a47C" />
|
||||
<UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="fvsi8gCLNwfR" name="" >
|
||||
<UML:Association.connection>
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="3U8MNb19hYC2" aggregation="aggregate" type="vy53e946a47C" name="" />
|
||||
<UML:AssociationEnd isSpecification="false" visibility="private" changeability="changeable" isNavigable="true" xmi.id="GkOUczoJFXJS" aggregation="none" type="vy53e946a47C" name="pool" multiplicity="0..*" />
|
||||
</UML:Association.connection>
|
||||
</UML:Association>
|
||||
<UML:Generalization isSpecification="false" child="vy53e946a47C" visibility="public" namespace="Logical View" xmi.id="udobO5QNil4Q" parent="vy53e946a47C" discriminator="" name="" />
|
||||
<UML:Generalization isSpecification="false" child="vy53e946a47C" visibility="public" namespace="Logical View" xmi.id="JLylJCkYo23X" parent="vy53e946a47C" discriminator="" name="" />
|
||||
<UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="Kq40rRjmpqxB" name="" >
|
||||
<UML:Association.connection>
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="o65gu4eyZkKu" aggregation="composite" type="vy53e946a47C" name="" />
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="LJ40sE36yPZY" aggregation="none" type="vy53e946a47C" name="" />
|
||||
</UML:Association.connection>
|
||||
</UML:Association>
|
||||
<UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="F77Ohxt9mWLc" name="" >
|
||||
<UML:Association.connection>
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="MNrbs93gD7M8" aggregation="composite" type="vy53e946a47C" name="" />
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="By6kjOd2hf3X" aggregation="none" type="vy53e946a47C" name="" />
|
||||
</UML:Association.connection>
|
||||
</UML:Association>
|
||||
<UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="SlsDHDpgpvdB" name="" >
|
||||
<UML:Association.connection>
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="t4cpRBMnWDMO" aggregation="composite" type="vy53e946a47C" name="" />
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="KQ4YXPggNkP4" aggregation="none" type="vy53e946a47C" name="template" multiplicity="1" />
|
||||
</UML:Association.connection>
|
||||
</UML:Association>
|
||||
<UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="XhoKcPVkULbi" name="" >
|
||||
<UML:Association.connection>
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="627nh8JYAtLb" aggregation="composite" type="vy53e946a47C" name="" />
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="4hOYtkuD8yjd" aggregation="none" type="vy53e946a47C" name="history" multiplicity="1" />
|
||||
</UML:Association.connection>
|
||||
</UML:Association>
|
||||
<UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="NbGlbdxcIjX9" name="" >
|
||||
<UML:Association.connection>
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="false" xmi.id="LNKj5jlBjqxO" aggregation="none" type="vy53e946a47C" name="" />
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="yGw89FjBx5hq" aggregation="none" type="vy53e946a47C" name="" />
|
||||
</UML:Association.connection>
|
||||
</UML:Association>
|
||||
</UML:Namespace.ownedElement>
|
||||
<XMI.extension xmi.extender="umbrello" >
|
||||
<diagrams>
|
||||
<diagram snapgrid="0" showattsig="1" fillcolor="#eeeee6" linewidth="0" zoom="100" showgrid="0" showopsig="1" usefillcolor="1" snapx="10" canvaswidth="1016" snapy="10" showatts="1" xmi.id="YQA16jIjLSnq" documentation="" type="5" showops="1" showpackage="0" name="Dispatch Manager" localid="" showstereotype="0" showscope="1" snapcsgrid="0" font="Bitstream Vera Sans,8,-1,5,50,0,0,0,0,0" linecolor="#990000" canvasheight="899" >
|
||||
<widgets>
|
||||
<statewidget statetype="1" statename="HOLD" usesdiagramfillcolor="1" width="45" x="102" fillcolor="none" y="111" linewidth="none" height="25" usefillcolor="1" isinstance="0" xmi.id="cQRsSTx1r52y" documentation="" usesdiagramusefillcolor="1" font="Bitstream Vera Sans,8,-1,5,75,0,0,0,0,0" linecolor="none" >
|
||||
<Activities/>
|
||||
</statewidget>
|
||||
<statewidget statetype="1" statename="PENDING" usesdiagramfillcolor="1" width="66" x="91" fillcolor="none" y="218" linewidth="none" height="25" usefillcolor="1" isinstance="0" xmi.id="oIf7iSwtl6H7" documentation="" usesdiagramusefillcolor="1" font="Bitstream Vera Sans,8,-1,5,75,0,0,0,0,0" linecolor="none" >
|
||||
<Activities/>
|
||||
</statewidget>
|
||||
<statewidget statetype="1" statename="ACTIVE" usesdiagramfillcolor="0" width="187" x="328" fillcolor="#eeeee6" y="203" linewidth="none" height="55" usefillcolor="1" isinstance="0" xmi.id="gZOXePTQh8WQ" documentation="" usesdiagramusefillcolor="0" font="Bitstream Vera Sans,8,-1,5,75,0,0,0,0,0" linecolor="#990000" >
|
||||
<Activities>
|
||||
<Activity name="LCM->deploy" />
|
||||
<Activity name="(SUSPENDED) LCM->restore" />
|
||||
</Activities>
|
||||
</statewidget>
|
||||
<statewidget statetype="1" statename="STOPPED" usesdiagramfillcolor="0" width="117" x="194" fillcolor="#eeeee6" y="362" linewidth="none" height="55" usefillcolor="1" isinstance="0" xmi.id="YSHHYWPoyrPA" documentation="" usesdiagramusefillcolor="0" font="Bitstream Vera Sans,8,-1,5,50,0,0,0,0,0" linecolor="#990000" >
|
||||
<Activities>
|
||||
<Activity name="LCM_STATE=INIT" />
|
||||
<Activity name="History[etime]" />
|
||||
</Activities>
|
||||
</statewidget>
|
||||
<statewidget statetype="1" statename="FAILED" usesdiagramfillcolor="0" width="117" x="520" fillcolor="#eeeee6" y="362" linewidth="none" height="55" usefillcolor="1" isinstance="0" xmi.id="QAuLNYi367Yk" documentation="" usesdiagramusefillcolor="0" font="Bitstream Vera Sans,8,-1,5,50,0,0,0,0,0" linecolor="#990000" >
|
||||
<Activities>
|
||||
<Activity name="LCM_STATE=INIT" />
|
||||
<Activity name="History[etime]" />
|
||||
</Activities>
|
||||
</statewidget>
|
||||
<statewidget statetype="1" statename="SUSPENDED" usesdiagramfillcolor="0" width="125" x="648" fillcolor="#eeeee6" y="203" linewidth="none" height="55" usefillcolor="1" isinstance="0" xmi.id="W2BB8hZh7rwd" documentation="" usesdiagramusefillcolor="0" font="Bitstream Vera Sans,8,-1,5,75,0,0,0,0,0" linecolor="#990000" >
|
||||
<Activities>
|
||||
<Activity name="LCM_STATE = INIT" />
|
||||
<Activity name="History[suspend]" />
|
||||
</Activities>
|
||||
</statewidget>
|
||||
<statewidget statetype="1" statename="DONE" usesdiagramfillcolor="0" width="117" x="363" fillcolor="#eeeee6" y="443" linewidth="none" height="55" usefillcolor="1" isinstance="0" xmi.id="tyPk2vfgYjue" documentation="" usesdiagramusefillcolor="0" font="Bitstream Vera Sans,8,-1,5,75,0,0,0,0,0" linecolor="#990000" >
|
||||
<Activities>
|
||||
<Activity name="LCM_STATE=INIT" />
|
||||
<Activity name="History[etime]" />
|
||||
</Activities>
|
||||
</statewidget>
|
||||
<notewidget usesdiagramfillcolor="1" width="193" x="324" fillcolor="none" y="41" linewidth="none" height="76" usefillcolor="1" isinstance="0" xmi.id="CgtF4jpX9svA" text="Migrate (RUNNING)
|
||||
- History[running_etime]
|
||||
- History[etime]
|
||||
- Add new entry to history" usesdiagramusefillcolor="1" font="Bitstream Vera Sans,8,-1,5,50,0,0,0,0,0" linecolor="none" />
|
||||
<floatingtext usesdiagramfillcolor="1" width="71" x="26" fillcolor="none" y="162" linewidth="none" posttext="" role="700" height="19" usefillcolor="1" pretext="" isinstance="0" xmi.id="VsvOeMEcJlEJ" text="user->hold" usesdiagramusefillcolor="1" font="Bitstream Vera Sans,8,-1,5,50,0,0,0,0,0" linecolor="none" />
|
||||
<floatingtext usesdiagramfillcolor="1" width="90" x="135" fillcolor="none" y="162" linewidth="none" posttext="" role="700" height="19" usefillcolor="1" pretext="" isinstance="0" xmi.id="S2pNB21LECn4" text="user->release" usesdiagramusefillcolor="1" font="Bitstream Vera Sans,8,-1,5,50,0,0,0,0,0" linecolor="none" />
|
||||
<floatingtext usesdiagramfillcolor="1" width="89" x="96" fillcolor="none" y="320" linewidth="none" posttext="" role="700" height="19" usefillcolor="1" pretext="" isinstance="0" xmi.id="1WWVZKmeohiM" text="user->restore" usesdiagramusefillcolor="1" font="Bitstream Vera Sans,8,-1,5,50,0,0,0,0,0" linecolor="none" />
|
||||
<floatingtext usesdiagramfillcolor="1" width="96" x="534" fillcolor="none" y="200" linewidth="none" posttext="" role="700" height="19" usefillcolor="1" pretext="" isinstance="0" xmi.id="SGSHvKGQqlxB" text="user->suspend" usesdiagramusefillcolor="1" font="Bitstream Vera Sans,8,-1,5,50,0,0,0,0,0" linecolor="none" />
|
||||
<floatingtext usesdiagramfillcolor="1" width="89" x="546" fillcolor="none" y="251" linewidth="none" posttext="" role="700" height="19" usefillcolor="1" pretext="" isinstance="0" xmi.id="XcxCKK4MS0LO" text="user->restore" usesdiagramusefillcolor="1" font="Bitstream Vera Sans,8,-1,5,50,0,0,0,0,0" linecolor="none" />
|
||||
<floatingtext usesdiagramfillcolor="1" width="162" x="158" fillcolor="none" y="238" linewidth="none" posttext="" role="700" height="19" usefillcolor="1" pretext="" isinstance="0" xmi.id="aFo8MU8l4QQ3" text="sched->deploy, add history" usesdiagramusefillcolor="1" font="Bitstream Vera Sans,8,-1,5,50,0,0,0,0,0" linecolor="none" />
|
||||
<floatingtext usesdiagramfillcolor="1" width="80" x="453" fillcolor="none" y="321" linewidth="none" posttext="" role="700" height="19" usefillcolor="1" pretext="" isinstance="0" xmi.id="coYC6ibz4prN" text="LCM->failure" usesdiagramusefillcolor="1" font="Bitstream Vera Sans,8,-1,5,50,0,0,0,0,0" linecolor="none" />
|
||||
<floatingtext usesdiagramfillcolor="1" width="72" x="323" fillcolor="none" y="314" linewidth="none" posttext="" role="700" height="19" usefillcolor="1" pretext="" isinstance="0" xmi.id="46uQewWJpG3o" text="user->stop" usesdiagramusefillcolor="1" font="Bitstream Vera Sans,8,-1,5,50,0,0,0,0,0" linecolor="none" />
|
||||
<floatingtext usesdiagramfillcolor="1" width="99" x="373" fillcolor="none" y="129" linewidth="none" posttext="" role="700" height="19" usefillcolor="1" pretext="" isinstance="0" xmi.id="I5yH7l6UxYW4" text="sched->migrate" usesdiagramusefillcolor="1" font="Bitstream Vera Sans,8,-1,5,50,0,0,0,0,0" linecolor="none" />
|
||||
<floatingtext usesdiagramfillcolor="1" width="145" x="427" fillcolor="none" y="416" linewidth="none" posttext="" role="700" height="19" usefillcolor="1" pretext="" isinstance="0" xmi.id="ojSiPm8PumOq" text="user->shutdown, cancel" usesdiagramusefillcolor="1" font="Bitstream Vera Sans,8,-1,5,50,0,0,0,0,0" linecolor="none" />
|
||||
<floatingtext usesdiagramfillcolor="1" width="91" x="376" fillcolor="none" y="150" linewidth="none" posttext="" role="700" height="19" usefillcolor="1" pretext="" isinstance="0" xmi.id="EnUWSUICwybh" text="user->migrate" usesdiagramusefillcolor="1" font="Bitstream Vera Sans,8,-1,5,50,0,0,0,0,0" linecolor="none" />
|
||||
<floatingtext usesdiagramfillcolor="1" width="84" x="195" fillcolor="none" y="214" linewidth="none" posttext="" role="700" height="19" usefillcolor="1" pretext="" isinstance="0" xmi.id="6ybrMPqBiUGl" text="user->deploy" usesdiagramusefillcolor="1" font="Bitstream Vera Sans,8,-1,5,50,0,0,0,0,0" linecolor="none" />
|
||||
<floatingtext usesdiagramfillcolor="1" width="130" x="557" fillcolor="none" y="291" linewidth="none" posttext="" role="700" height="19" usefillcolor="1" pretext="" isinstance="0" xmi.id="VL63XdMttWBX" text="LCM->migrate_failure" usesdiagramusefillcolor="1" font="Bitstream Vera Sans,8,-1,5,50,0,0,0,0,0" linecolor="none" />
|
||||
<floatingtext usesdiagramfillcolor="1" width="135" x="557" fillcolor="none" y="310" linewidth="none" posttext="" role="700" height="19" usefillcolor="1" pretext="" isinstance="0" xmi.id="fk3sNroCZoh6" text="LCM->suspend_failure" usesdiagramusefillcolor="1" font="Bitstream Vera Sans,8,-1,5,50,0,0,0,0,0" linecolor="none" />
|
||||
<floatingtext usesdiagramfillcolor="1" width="111" x="557" fillcolor="none" y="329" linewidth="none" posttext="" role="700" height="19" usefillcolor="1" pretext="" isinstance="0" xmi.id="amcJOrZrCgsi" text="LCM->stop_failure" usesdiagramusefillcolor="1" font="Bitstream Vera Sans,8,-1,5,50,0,0,0,0,0" linecolor="none" />
|
||||
<floatingtext usesdiagramfillcolor="1" width="8" x="711" fillcolor="none" y="413" linewidth="none" posttext="" role="700" height="19" usefillcolor="1" pretext="" isinstance="0" xmi.id="HEbBlmgOUkEs" text="" usesdiagramusefillcolor="1" font="Bitstream Vera Sans,8,-1,5,50,0,0,0,0,0" linecolor="none" />
|
||||
</widgets>
|
||||
<messages/>
|
||||
<associations>
|
||||
<assocwidget totalcounta="3" indexa="1" visibilityB="200" totalcountb="3" indexb="1" linewidth="none" widgetbid="cQRsSTx1r52y" widgetaid="oIf7iSwtl6H7" roleBdoc="" documentation="" roleAdoc="" type="514" changeabilityA="900" changeabilityB="900" linecolor="none" visibilityA="200" >
|
||||
<linepath>
|
||||
<startpoint startx="113" starty="218" />
|
||||
<endpoint endx="117" endy="136" />
|
||||
</linepath>
|
||||
</assocwidget>
|
||||
<assocwidget totalcounta="2" indexa="1" visibilityB="200" totalcountb="2" indexb="1" linewidth="none" widgetbid="gZOXePTQh8WQ" widgetaid="oIf7iSwtl6H7" roleBdoc="" documentation="" roleAdoc="" type="514" changeabilityA="900" changeabilityB="900" linecolor="none" visibilityA="200" >
|
||||
<linepath>
|
||||
<startpoint startx="157" starty="230" />
|
||||
<endpoint endx="328" endy="230" />
|
||||
</linepath>
|
||||
</assocwidget>
|
||||
<assocwidget totalcounta="4" indexa="1" visibilityB="200" totalcountb="3" indexb="2" linewidth="none" widgetbid="YSHHYWPoyrPA" widgetaid="gZOXePTQh8WQ" roleBdoc="" documentation="" roleAdoc="" type="514" changeabilityA="900" changeabilityB="900" linecolor="none" visibilityA="200" >
|
||||
<linepath>
|
||||
<startpoint startx="374" starty="258" />
|
||||
<endpoint endx="272" endy="362" />
|
||||
</linepath>
|
||||
</assocwidget>
|
||||
<assocwidget totalcounta="3" indexa="1" visibilityB="200" totalcountb="3" indexb="1" linewidth="none" widgetbid="W2BB8hZh7rwd" widgetaid="gZOXePTQh8WQ" roleBdoc="" documentation="" roleAdoc="" type="514" changeabilityA="900" changeabilityB="900" linecolor="none" visibilityA="200" >
|
||||
<linepath>
|
||||
<startpoint startx="515" starty="221" />
|
||||
<endpoint endx="648" endy="221" />
|
||||
</linepath>
|
||||
</assocwidget>
|
||||
<assocwidget totalcounta="4" indexa="2" visibilityB="200" totalcountb="2" indexb="1" linewidth="none" widgetbid="tyPk2vfgYjue" widgetaid="gZOXePTQh8WQ" roleBdoc="" documentation="" roleAdoc="" type="514" changeabilityA="900" changeabilityB="900" linecolor="none" visibilityA="200" >
|
||||
<linepath>
|
||||
<startpoint startx="421" starty="258" />
|
||||
<endpoint endx="421" endy="443" />
|
||||
</linepath>
|
||||
</assocwidget>
|
||||
<assocwidget totalcounta="3" indexa="2" visibilityB="200" totalcountb="3" indexb="2" linewidth="none" widgetbid="oIf7iSwtl6H7" widgetaid="cQRsSTx1r52y" roleBdoc="" documentation="" roleAdoc="" type="514" changeabilityA="900" changeabilityB="900" linecolor="none" visibilityA="200" >
|
||||
<linepath>
|
||||
<startpoint startx="132" starty="136" />
|
||||
<endpoint endx="135" endy="218" />
|
||||
</linepath>
|
||||
</assocwidget>
|
||||
<assocwidget totalcounta="3" indexa="1" visibilityB="200" totalcountb="2" indexb="1" linewidth="none" widgetbid="oIf7iSwtl6H7" widgetaid="YSHHYWPoyrPA" roleBdoc="" documentation="" roleAdoc="" type="514" changeabilityA="900" changeabilityB="900" linecolor="none" visibilityA="200" >
|
||||
<linepath>
|
||||
<startpoint startx="233" starty="362" />
|
||||
<endpoint endx="124" endy="243" />
|
||||
</linepath>
|
||||
</assocwidget>
|
||||
<assocwidget totalcounta="3" indexa="2" visibilityB="200" totalcountb="3" indexb="2" linewidth="none" widgetbid="gZOXePTQh8WQ" widgetaid="W2BB8hZh7rwd" roleBdoc="" documentation="" roleAdoc="" type="514" changeabilityA="900" changeabilityB="900" linecolor="none" visibilityA="200" >
|
||||
<linepath>
|
||||
<startpoint startx="648" starty="239" />
|
||||
<endpoint endx="515" endy="239" />
|
||||
</linepath>
|
||||
</assocwidget>
|
||||
<assocwidget totalcounta="4" indexa="3" visibilityB="200" totalcountb="2" indexb="1" linewidth="none" widgetbid="QAuLNYi367Yk" widgetaid="gZOXePTQh8WQ" roleBdoc="" documentation="" roleAdoc="" type="514" changeabilityA="900" changeabilityB="900" linecolor="none" visibilityA="200" >
|
||||
<linepath>
|
||||
<startpoint startx="468" starty="258" />
|
||||
<endpoint endx="578" endy="362" />
|
||||
</linepath>
|
||||
</assocwidget>
|
||||
<assocwidget totalcounta="2" indexa="1" visibilityB="200" totalcountb="0" indexb="0" linewidth="none" widgetbid="gZOXePTQh8WQ" widgetaid="gZOXePTQh8WQ" roleBdoc="" documentation="" roleAdoc="" type="514" changeabilityA="900" changeabilityB="900" linecolor="none" visibilityA="200" >
|
||||
<linepath>
|
||||
<startpoint startx="374" starty="203" />
|
||||
<endpoint endx="468" endy="203" />
|
||||
<point x="374" y="153" />
|
||||
<point x="468" y="153" />
|
||||
</linepath>
|
||||
</assocwidget>
|
||||
</associations>
|
||||
</diagram>
|
||||
</diagrams>
|
||||
</XMI.extension>
|
||||
</UML:Model>
|
||||
<UML:Model stereotype="folder" isSpecification="false" isLeaf="false" visibility="public" namespace="m1" xmi.id="Use Case View" isRoot="false" isAbstract="false" name="Use Case View" >
|
||||
<UML:Namespace.ownedElement/>
|
||||
</UML:Model>
|
||||
<UML:Model stereotype="folder" isSpecification="false" isLeaf="false" visibility="public" namespace="m1" xmi.id="Component View" isRoot="false" isAbstract="false" name="Component View" >
|
||||
<UML:Namespace.ownedElement/>
|
||||
</UML:Model>
|
||||
<UML:Model stereotype="folder" isSpecification="false" isLeaf="false" visibility="public" namespace="m1" xmi.id="Deployment View" isRoot="false" isAbstract="false" name="Deployment View" >
|
||||
<UML:Namespace.ownedElement/>
|
||||
</UML:Model>
|
||||
<UML:Model stereotype="folder" isSpecification="false" isLeaf="false" visibility="public" namespace="m1" xmi.id="Entity Relationship Model" isRoot="false" isAbstract="false" name="Entity Relationship Model" >
|
||||
<UML:Namespace.ownedElement/>
|
||||
</UML:Model>
|
||||
</UML:Namespace.ownedElement>
|
||||
</UML:Model>
|
||||
</XMI.content>
|
||||
<XMI.extensions xmi.extender="umbrello" >
|
||||
<docsettings viewid="YQA16jIjLSnq" documentation="" uniqueid="HEbBlmgOUkEs" />
|
||||
<listview>
|
||||
<listitem open="1" type="800" label="Views" >
|
||||
<listitem open="1" type="801" id="Logical View" >
|
||||
<listitem open="0" type="808" id="YQA16jIjLSnq" label="Dispatch Manager" />
|
||||
<listitem open="0" type="830" id="Datatypes" >
|
||||
<listitem open="0" type="829" id="XMIKc2o5J6Nu" />
|
||||
<listitem open="1" type="829" id="XNuw315mXeUm" />
|
||||
<listitem open="1" type="829" id="BKzfuxuVlEmK" />
|
||||
<listitem open="1" type="829" id="oRTstiC5X0HW" />
|
||||
<listitem open="1" type="829" id="Nu2tsIN4aMhU" />
|
||||
<listitem open="1" type="829" id="41ex5eEr4fjx" />
|
||||
<listitem open="1" type="829" id="bqKIZpHLv42H" />
|
||||
<listitem open="1" type="829" id="c2eghLb5Fcw6" />
|
||||
<listitem open="0" type="829" id="WUJUz2wkP4qL" />
|
||||
<listitem open="0" type="829" id="mxryNx8LdqSJ" />
|
||||
<listitem open="1" type="829" id="Hby3oiLsjxpm" />
|
||||
<listitem open="0" type="829" id="FRk6rIA1W1VM" />
|
||||
<listitem open="1" type="829" id="EnOdbIq8WtLj" />
|
||||
<listitem open="0" type="829" id="vy53e946a47C" />
|
||||
<listitem open="1" type="829" id="sJASdpuvRqwF" />
|
||||
<listitem open="1" type="829" id="x2fBcbHSsPuV" />
|
||||
<listitem open="1" type="829" id="WF5DDs0nucRc" />
|
||||
</listitem>
|
||||
</listitem>
|
||||
<listitem open="1" type="802" id="Use Case View" />
|
||||
<listitem open="1" type="821" id="Component View" />
|
||||
<listitem open="1" type="827" id="Deployment View" />
|
||||
<listitem open="1" type="836" id="Entity Relationship Model" />
|
||||
</listitem>
|
||||
</listview>
|
||||
<codegeneration>
|
||||
<codegenerator language="C++" />
|
||||
</codegeneration>
|
||||
</XMI.extensions>
|
||||
</XMI>
|
437
share/doc/design/life-cycle manager.xmi
Normal file
437
share/doc/design/life-cycle manager.xmi
Normal file
@ -0,0 +1,437 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<XMI xmlns:UML="http://schema.omg.org/spec/UML/1.3" verified="false" timestamp="2008-02-18T17:55:32" xmi.version="1.2" >
|
||||
<XMI.header>
|
||||
<XMI.documentation>
|
||||
<XMI.exporter>umbrello uml modeller http://uml.sf.net</XMI.exporter>
|
||||
<XMI.exporterVersion>1.5.8</XMI.exporterVersion>
|
||||
<XMI.exporterEncoding>UnicodeUTF8</XMI.exporterEncoding>
|
||||
</XMI.documentation>
|
||||
<XMI.metamodel xmi.name="UML" href="UML.xml" xmi.version="1.3" />
|
||||
</XMI.header>
|
||||
<XMI.content>
|
||||
<UML:Model isSpecification="false" isLeaf="false" isRoot="false" xmi.id="m1" isAbstract="false" name="UML Model" >
|
||||
<UML:Namespace.ownedElement>
|
||||
<UML:Stereotype isSpecification="false" isLeaf="false" visibility="public" namespace="m1" xmi.id="folder" isRoot="false" isAbstract="false" name="folder" />
|
||||
<UML:Stereotype isSpecification="false" isLeaf="false" visibility="public" namespace="m1" xmi.id="datatype" isRoot="false" isAbstract="false" name="datatype" />
|
||||
<UML:Stereotype isSpecification="false" isLeaf="false" visibility="public" namespace="m1" xmi.id="interface" isRoot="false" isAbstract="false" name="interface" />
|
||||
<UML:Stereotype isSpecification="false" isLeaf="false" visibility="public" namespace="m1" xmi.id="ActionListener" isRoot="false" isAbstract="false" name="ActionListener" />
|
||||
<UML:Stereotype isSpecification="false" isLeaf="false" visibility="public" namespace="m1" xmi.id="enum" isRoot="false" isAbstract="false" name="enum" />
|
||||
<UML:Model stereotype="folder" isSpecification="false" isLeaf="false" visibility="public" namespace="m1" xmi.id="Logical View" isRoot="false" isAbstract="false" name="Logical View" >
|
||||
<UML:Namespace.ownedElement>
|
||||
<UML:Package stereotype="folder" isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="Datatypes" isRoot="false" isAbstract="false" name="Datatypes" >
|
||||
<UML:Namespace.ownedElement>
|
||||
<UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="bqKIZpHLv42H" isRoot="false" isAbstract="false" name="int" />
|
||||
<UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="oRTstiC5X0HW" isRoot="false" isAbstract="false" name="char" />
|
||||
<UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="BKzfuxuVlEmK" isRoot="false" isAbstract="false" name="bool" />
|
||||
<UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="41ex5eEr4fjx" isRoot="false" isAbstract="false" name="float" />
|
||||
<UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="Nu2tsIN4aMhU" isRoot="false" isAbstract="false" name="double" />
|
||||
<UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="Hby3oiLsjxpm" isRoot="false" isAbstract="false" name="short" />
|
||||
<UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="c2eghLb5Fcw6" isRoot="false" isAbstract="false" name="long" />
|
||||
<UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="sJASdpuvRqwF" isRoot="false" isAbstract="false" name="unsigned int" />
|
||||
<UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="WF5DDs0nucRc" isRoot="false" isAbstract="false" name="unsigned short" />
|
||||
<UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="x2fBcbHSsPuV" isRoot="false" isAbstract="false" name="unsigned long" />
|
||||
<UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="EnOdbIq8WtLj" isRoot="false" isAbstract="false" name="string" />
|
||||
<UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="FRk6rIA1W1VM" isRoot="false" isAbstract="false" name="sqlite3 *" elementReference="vy53e946a47C" />
|
||||
<UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="XMIKc2o5J6Nu" isRoot="false" isAbstract="false" name="ActionListener *" elementReference="vy53e946a47C" />
|
||||
<UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="WUJUz2wkP4qL" isRoot="false" isAbstract="false" name="map<int,ObjectSQL*>" elementReference="vy53e946a47C" />
|
||||
<UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="XNuw315mXeUm" isRoot="false" isAbstract="false" name="ObjectSQL *" />
|
||||
<UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="vy53e946a47C" isRoot="false" isAbstract="false" name="undef" >
|
||||
<UML:GeneralizableElement.generalization>
|
||||
<UML:Generalization xmi.idref="KOw9slpUVSCK" />
|
||||
<UML:Generalization xmi.idref="udobO5QNil4Q" />
|
||||
<UML:Generalization xmi.idref="JLylJCkYo23X" />
|
||||
</UML:GeneralizableElement.generalization>
|
||||
</UML:DataType>
|
||||
<UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="mxryNx8LdqSJ" isRoot="false" isAbstract="false" name="map<int,attribute>" elementReference="vy53e946a47C" />
|
||||
</UML:Namespace.ownedElement>
|
||||
</UML:Package>
|
||||
<UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="ruL8hEHJf71m" name="" >
|
||||
<UML:Association.connection>
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="BZCkcCmjaBNG" aggregation="composite" type="vy53e946a47C" name="" />
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="sNLV7XAg4Xmk" aggregation="none" type="vy53e946a47C" name="" />
|
||||
</UML:Association.connection>
|
||||
</UML:Association>
|
||||
<UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="hjipPCuUAVPQ" name="" >
|
||||
<UML:Association.connection>
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="SqrCBTmM0x5c" aggregation="composite" type="vy53e946a47C" name="" multiplicity="1" />
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="7rJh1hvr4HNA" aggregation="none" type="vy53e946a47C" name="" multiplicity="0..*" />
|
||||
</UML:Association.connection>
|
||||
</UML:Association>
|
||||
<UML:Abstraction isSpecification="false" visibility="public" namespace="Logical View" xmi.id="DCXqsURB7Car" client="vy53e946a47C" name="" supplier="vy53e946a47C" />
|
||||
<UML:Abstraction isSpecification="false" visibility="public" namespace="Logical View" xmi.id="VvRc5zSWiu2N" client="vy53e946a47C" name="" supplier="vy53e946a47C" />
|
||||
<UML:Abstraction isSpecification="false" visibility="public" namespace="Logical View" xmi.id="Gq5yk7K4083P" client="vy53e946a47C" name="" supplier="vy53e946a47C" />
|
||||
<UML:Abstraction isSpecification="false" visibility="public" namespace="Logical View" xmi.id="eHdeNg3WcYlX" client="vy53e946a47C" name="" supplier="vy53e946a47C" />
|
||||
<UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="Are2UTPMWnQH" name="" >
|
||||
<UML:Association.connection>
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="oVot2YbUMSeY" aggregation="composite" type="vy53e946a47C" name="" />
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="tOstJxVQnn6m" aggregation="none" type="vy53e946a47C" name="" />
|
||||
</UML:Association.connection>
|
||||
</UML:Association>
|
||||
<UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="CwDiWUhJndUK" name="" >
|
||||
<UML:Association.connection>
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="U1dWGye5TSwT" aggregation="composite" type="vy53e946a47C" name="" />
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="0XvNyZtrwllF" aggregation="none" type="vy53e946a47C" name="" />
|
||||
</UML:Association.connection>
|
||||
</UML:Association>
|
||||
<UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="ZPsL0MdKjRuq" name="" >
|
||||
<UML:Association.connection>
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="hEeU1iGThryy" aggregation="composite" type="vy53e946a47C" name="" />
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="qc1H5xl3SgOQ" aggregation="none" type="vy53e946a47C" name="" />
|
||||
</UML:Association.connection>
|
||||
</UML:Association>
|
||||
<UML:Generalization isSpecification="false" child="vy53e946a47C" visibility="public" namespace="Logical View" xmi.id="KOw9slpUVSCK" parent="vy53e946a47C" discriminator="" name="" />
|
||||
<UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="Zew276Kva1UC" name="" >
|
||||
<UML:Association.connection>
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="EFIA11NiFzAF" aggregation="composite" type="vy53e946a47C" name="" />
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="fOiNDeL3HMLK" aggregation="none" type="vy53e946a47C" name="" />
|
||||
</UML:Association.connection>
|
||||
</UML:Association>
|
||||
<UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="8OffyHH7J51e" name="" >
|
||||
<UML:Association.connection>
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="H6Ljkk8yxQ6y" aggregation="composite" type="vy53e946a47C" name="" />
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="PSeePmr58YQM" aggregation="none" type="vy53e946a47C" name="" />
|
||||
</UML:Association.connection>
|
||||
</UML:Association>
|
||||
<UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="rLzAQznN0fxo" name="" >
|
||||
<UML:Association.connection>
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="ClPR5ilMm73X" aggregation="composite" type="vy53e946a47C" name="" />
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="p9TkXYjw0LZN" aggregation="none" type="vy53e946a47C" name="" multiplicity="2" />
|
||||
</UML:Association.connection>
|
||||
</UML:Association>
|
||||
<UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="N2IAYOSx9uEH" name="" >
|
||||
<UML:Association.connection>
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="6QQEyqaBbyce" aggregation="composite" type="vy53e946a47C" name="" />
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="gMyRR0yE9Pyh" aggregation="none" type="vy53e946a47C" name="" />
|
||||
</UML:Association.connection>
|
||||
</UML:Association>
|
||||
<UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="adQpG9tPizWw" name="" >
|
||||
<UML:Association.connection>
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="xfdv1CH7dhJb" aggregation="composite" type="vy53e946a47C" name="" />
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="Yuk7sLmWhkx6" aggregation="none" type="vy53e946a47C" name="" />
|
||||
</UML:Association.connection>
|
||||
</UML:Association>
|
||||
<UML:Abstraction isSpecification="false" visibility="public" namespace="Logical View" xmi.id="iNuf7uC50BLw" client="vy53e946a47C" name="" supplier="vy53e946a47C" />
|
||||
<UML:Dependency isSpecification="false" visibility="public" namespace="Logical View" xmi.id="3a0CTjhkgTis" client="vy53e946a47C" name="" supplier="vy53e946a47C" />
|
||||
<UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="fvsi8gCLNwfR" name="" >
|
||||
<UML:Association.connection>
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="ktKuJGZEwC8v" aggregation="aggregate" type="vy53e946a47C" name="" />
|
||||
<UML:AssociationEnd isSpecification="false" visibility="private" changeability="changeable" isNavigable="true" xmi.id="PP006JZeBKm3" aggregation="none" type="vy53e946a47C" name="pool" multiplicity="0..*" />
|
||||
</UML:Association.connection>
|
||||
</UML:Association>
|
||||
<UML:Generalization isSpecification="false" child="vy53e946a47C" visibility="public" namespace="Logical View" xmi.id="udobO5QNil4Q" parent="vy53e946a47C" discriminator="" name="" />
|
||||
<UML:Generalization isSpecification="false" child="vy53e946a47C" visibility="public" namespace="Logical View" xmi.id="JLylJCkYo23X" parent="vy53e946a47C" discriminator="" name="" />
|
||||
<UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="Kq40rRjmpqxB" name="" >
|
||||
<UML:Association.connection>
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="dWYIGVOzPgrg" aggregation="composite" type="vy53e946a47C" name="" />
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="uQsoc0jzNhxU" aggregation="none" type="vy53e946a47C" name="" />
|
||||
</UML:Association.connection>
|
||||
</UML:Association>
|
||||
<UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="F77Ohxt9mWLc" name="" >
|
||||
<UML:Association.connection>
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="1X6CpsESOmkd" aggregation="composite" type="vy53e946a47C" name="" />
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="F6aekRIer9TR" aggregation="none" type="vy53e946a47C" name="" />
|
||||
</UML:Association.connection>
|
||||
</UML:Association>
|
||||
<UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="SlsDHDpgpvdB" name="" >
|
||||
<UML:Association.connection>
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="9APXsMzrt51i" aggregation="composite" type="vy53e946a47C" name="" />
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="wF8IzqvFuVre" aggregation="none" type="vy53e946a47C" name="template" multiplicity="1" />
|
||||
</UML:Association.connection>
|
||||
</UML:Association>
|
||||
<UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="XhoKcPVkULbi" name="" >
|
||||
<UML:Association.connection>
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="u8HlHiBQqavg" aggregation="composite" type="vy53e946a47C" name="" />
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="wsXoyXUukdCk" aggregation="none" type="vy53e946a47C" name="history" multiplicity="1" />
|
||||
</UML:Association.connection>
|
||||
</UML:Association>
|
||||
<UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="NbGlbdxcIjX9" name="" >
|
||||
<UML:Association.connection>
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="false" xmi.id="R6xMZoyUwFDD" aggregation="none" type="vy53e946a47C" name="" />
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="vOcmwVSrOydK" aggregation="none" type="vy53e946a47C" name="" />
|
||||
</UML:Association.connection>
|
||||
</UML:Association>
|
||||
</UML:Namespace.ownedElement>
|
||||
<XMI.extension xmi.extender="umbrello" >
|
||||
<diagrams>
|
||||
<diagram snapgrid="1" showattsig="1" fillcolor="#d6d9e6" linewidth="1" zoom="100" showgrid="1" showopsig="1" usefillcolor="1" snapx="7" canvaswidth="1366" snapy="7" showatts="1" xmi.id="TmQ0063LG4Sn" documentation="" type="5" showops="1" showpackage="0" name="Life-cycle Manager" localid="" showstereotype="0" showscope="1" snapcsgrid="0" font="Bitstream Vera Sans,8,-1,5,50,0,0,0,0,0" linecolor="#4d515b" canvasheight="883" >
|
||||
<widgets>
|
||||
<statewidget statetype="1" statename="SHUTDOWN" usesdiagramfillcolor="0" width="167" x="1057" fillcolor="#d6d9e6" y="322" linewidth="none" height="40" usefillcolor="1" isinstance="0" xmi.id="XOHvRm0fOT7w" documentation="" usesdiagramusefillcolor="0" font="Bitstream Vera Sans,8,-1,5,50,0,0,0,0,0" linecolor="#4d515b" >
|
||||
<Activities>
|
||||
<Activity name="Trigger shutdown->VMM" />
|
||||
</Activities>
|
||||
</statewidget>
|
||||
<statewidget statetype="1" statename="RUNNING" usesdiagramfillcolor="0" width="225" x="630" fillcolor="#d6d9e6" y="322" linewidth="none" height="40" usefillcolor="1" isinstance="0" xmi.id="gNq8uGMqbbs2" documentation="" usesdiagramusefillcolor="0" font="Bitstream Vera Sans,8,-1,5,50,0,0,0,0,0" linecolor="#4d515b" >
|
||||
<Activities>
|
||||
<Activity name="(MIGRATE) History[running_stime]" />
|
||||
</Activities>
|
||||
</statewidget>
|
||||
<statewidget statetype="1" statename="MIGRATE" usesdiagramfillcolor="0" width="103" x="518" fillcolor="#d6d9e6" y="413" linewidth="none" height="40" usefillcolor="1" isinstance="0" xmi.id="wfPL6WFmr5uk" documentation="" usesdiagramusefillcolor="0" font="Bitstream Vera Sans,8,-1,5,75,0,0,0,0,0" linecolor="#4d515b" >
|
||||
<Activities>
|
||||
<Activity name="migrate->VMM" />
|
||||
</Activities>
|
||||
</statewidget>
|
||||
<statewidget statetype="1" statename="SAVE_MIGRATE" usesdiagramfillcolor="0" width="104" x="518" fillcolor="#d6d9e6" y="161" linewidth="none" height="40" usefillcolor="1" isinstance="0" xmi.id="JFYvqOvyWR4f" documentation="" usesdiagramusefillcolor="0" font="Bitstream Vera Sans,8,-1,5,75,0,0,0,0,0" linecolor="#4d515b" >
|
||||
<Activities>
|
||||
<Activity name="save->VMM" />
|
||||
</Activities>
|
||||
</statewidget>
|
||||
<statewidget statetype="1" statename="SAVE_SUSPEND" usesdiagramfillcolor="0" width="107" x="686" fillcolor="#d6d9e6" y="105" linewidth="none" height="40" usefillcolor="1" isinstance="0" xmi.id="OzOi91S4erPk" documentation="" usesdiagramusefillcolor="0" font="Bitstream Vera Sans,8,-1,5,50,0,0,0,0,0" linecolor="#4d515b" >
|
||||
<Activities>
|
||||
<Activity name="save->VMM" />
|
||||
</Activities>
|
||||
</statewidget>
|
||||
<statewidget statetype="1" statename="SAVE_STOP" usesdiagramfillcolor="0" width="84" x="854" fillcolor="#d6d9e6" y="161" linewidth="none" height="40" usefillcolor="1" isinstance="0" xmi.id="LcVAfNuzcQsQ" documentation="" usesdiagramusefillcolor="0" font="Bitstream Vera Sans,8,-1,5,75,0,0,0,0,0" linecolor="#4d515b" >
|
||||
<Activities>
|
||||
<Activity name="save->VMM" />
|
||||
</Activities>
|
||||
</statewidget>
|
||||
<statewidget statetype="1" statename="EPILOG_STOP" usesdiagramfillcolor="0" width="156" x="1064" fillcolor="#d6d9e6" y="147" linewidth="none" height="70" usefillcolor="1" isinstance="0" xmi.id="onNIDRybPMHW" documentation="" usesdiagramusefillcolor="0" font="Bitstream Vera Sans,8,-1,5,50,0,0,0,0,0" linecolor="#4d515b" >
|
||||
<Activities>
|
||||
<Activity name="History[running_etime]" />
|
||||
<Activity name="History[epilog_stime]" />
|
||||
<Activity name="epilog->TM" />
|
||||
</Activities>
|
||||
</statewidget>
|
||||
<statewidget statetype="1" statename="EPILOG" usesdiagramfillcolor="0" width="156" x="1064" fillcolor="#d6d9e6" y="448" linewidth="none" height="70" usefillcolor="1" isinstance="0" xmi.id="LjaxYzirZB2F" documentation="" usesdiagramusefillcolor="0" font="Bitstream Vera Sans,8,-1,5,50,0,0,0,0,0" linecolor="#4d515b" >
|
||||
<Activities>
|
||||
<Activity name="History[running_etime]" />
|
||||
<Activity name="History[epilog_stime]" />
|
||||
<Activity name="epilog->TM" />
|
||||
</Activities>
|
||||
</statewidget>
|
||||
<statewidget statetype="1" statename="PROLOG" usesdiagramfillcolor="0" width="147" x="42" fillcolor="#d6d9e6" y="154" linewidth="none" height="55" usefillcolor="1" isinstance="0" xmi.id="YuC9L4Z7pwQ2" documentation="" usesdiagramusefillcolor="0" font="Bitstream Vera Sans,8,-1,5,50,0,0,0,0,0" linecolor="#4d515b" >
|
||||
<Activities>
|
||||
<Activity name="History[prolog_stime]" />
|
||||
<Activity name="prolog->TM" />
|
||||
</Activities>
|
||||
</statewidget>
|
||||
<statewidget statetype="1" statename="BOOT" usesdiagramfillcolor="0" width="155" x="133" fillcolor="#d6d9e6" y="308" linewidth="none" height="70" usefillcolor="1" isinstance="0" xmi.id="MOdjivF4cqzB" documentation="" usesdiagramusefillcolor="0" font="Bitstream Vera Sans,8,-1,5,50,0,0,0,0,0" linecolor="#4d515b" >
|
||||
<Activities>
|
||||
<Activity name="History[prolog_etime]" />
|
||||
<Activity name="History[running_stime]" />
|
||||
<Activity name="deploy/restore->VMM" />
|
||||
</Activities>
|
||||
</statewidget>
|
||||
<floatingtext usesdiagramfillcolor="1" width="107" x="525" fillcolor="none" y="357" linewidth="none" posttext="" role="700" height="19" usefillcolor="1" pretext="" isinstance="0" xmi.id="eDKe21au3YBR" text="DM->live_migrate" usesdiagramusefillcolor="1" font="Bitstream Vera Sans,8,-1,5,50,0,0,0,0,0" linecolor="none" />
|
||||
<floatingtext usesdiagramfillcolor="1" width="127" x="1015" fillcolor="none" y="406" linewidth="none" posttext="" role="700" height="19" usefillcolor="1" pretext="" isinstance="0" xmi.id="rOwAlJsuHX3U" text="VMM->shutdown(S/F)" usesdiagramusefillcolor="1" font="Bitstream Vera Sans,8,-1,5,50,0,0,0,0,0" linecolor="none" />
|
||||
<floatingtext usesdiagramfillcolor="1" width="63" x="861" fillcolor="none" y="259" linewidth="none" posttext="" role="700" height="19" usefillcolor="1" pretext="" isinstance="0" xmi.id="i1EQaYj2f6mN" text="DM->stop" usesdiagramusefillcolor="1" font="Bitstream Vera Sans,8,-1,5,50,0,0,0,0,0" linecolor="none" />
|
||||
<floatingtext usesdiagramfillcolor="1" width="82" x="539" fillcolor="none" y="259" linewidth="none" posttext="" role="700" height="19" usefillcolor="1" pretext="" isinstance="0" xmi.id="vMWCDhmWu9tX" text="DM->migrate" usesdiagramusefillcolor="1" font="Bitstream Vera Sans,8,-1,5,50,0,0,0,0,0" linecolor="none" />
|
||||
<floatingtext usesdiagramfillcolor="1" width="87" x="749" fillcolor="none" y="224" linewidth="none" posttext="" role="700" height="19" usefillcolor="1" pretext="" isinstance="0" xmi.id="CB5qoelKzyv0" text="DM->suspend" usesdiagramusefillcolor="1" font="Bitstream Vera Sans,8,-1,5,50,0,0,0,0,0" linecolor="none" />
|
||||
<floatingtext usesdiagramfillcolor="1" width="89" x="966" fillcolor="none" y="154" linewidth="none" posttext="" role="700" height="19" usefillcolor="1" pretext="" isinstance="0" xmi.id="gs6yD5aSKGLH" text="VMM->save(S)" usesdiagramusefillcolor="1" font="Bitstream Vera Sans,8,-1,5,50,0,0,0,0,0" linecolor="none" />
|
||||
<floatingtext usesdiagramfillcolor="1" width="89" x="427" fillcolor="none" y="154" linewidth="none" posttext="" role="700" height="19" usefillcolor="1" pretext="" isinstance="0" xmi.id="4PZJUDAa9Ndk" text="VMM->save(S)" usesdiagramusefillcolor="1" font="Bitstream Vera Sans,8,-1,5,50,0,0,0,0,0" linecolor="none" />
|
||||
<floatingtext usesdiagramfillcolor="1" width="89" x="168" fillcolor="none" y="245" linewidth="none" posttext="" role="700" height="19" usefillcolor="1" pretext="" isinstance="0" xmi.id="6vs5prhSClqk" text="TM->prolog(S)" usesdiagramusefillcolor="1" font="Bitstream Vera Sans,8,-1,5,50,0,0,0,0,0" linecolor="none" />
|
||||
<statewidget statetype="2" statename="State" usesdiagramfillcolor="1" width="21" x="728" fillcolor="none" y="28" linewidth="none" height="20" usefillcolor="1" isinstance="0" xmi.id="ARGKD44GM0RC" documentation="" usesdiagramusefillcolor="1" font="Bitstream Vera Sans,8,-1,5,50,0,0,0,0,0" linecolor="none" >
|
||||
<Activities/>
|
||||
</statewidget>
|
||||
<floatingtext usesdiagramfillcolor="1" width="77" x="665" fillcolor="none" y="7" linewidth="none" posttext="" role="700" height="19" usefillcolor="1" pretext="" isinstance="0" xmi.id="9ty8CiwK9AfM" text="SUSPENDED" usesdiagramusefillcolor="1" font="Bitstream Vera Sans,8,-1,5,50,0,0,0,0,0" linecolor="none" />
|
||||
<statewidget statetype="2" statename="State" usesdiagramfillcolor="1" width="22" x="1127" fillcolor="none" y="42" linewidth="none" height="22" usefillcolor="1" isinstance="0" xmi.id="83PhM2P4GDSS" documentation="" usesdiagramusefillcolor="1" font="Bitstream Vera Sans,8,-1,5,50,0,0,0,0,0" linecolor="none" >
|
||||
<Activities/>
|
||||
</statewidget>
|
||||
<floatingtext usesdiagramfillcolor="1" width="61" x="1113" fillcolor="none" y="21" linewidth="none" posttext="" role="700" height="19" usefillcolor="1" pretext="" isinstance="0" xmi.id="eVtX6Ie2CPGz" text="STOPPED" usesdiagramusefillcolor="1" font="Bitstream Vera Sans,8,-1,5,50,0,0,0,0,0" linecolor="none" />
|
||||
<statewidget statetype="2" statename="State" usesdiagramfillcolor="1" width="22" x="1127" fillcolor="none" y="588" linewidth="none" height="21" usefillcolor="1" isinstance="0" xmi.id="XG1lRRE5w5c1" documentation="" usesdiagramusefillcolor="1" font="Bitstream Vera Sans,8,-1,5,50,0,0,0,0,0" linecolor="none" >
|
||||
<Activities/>
|
||||
</statewidget>
|
||||
<floatingtext usesdiagramfillcolor="1" width="40" x="1120" fillcolor="none" y="609" linewidth="none" posttext="" role="700" height="19" usefillcolor="1" pretext="" isinstance="0" xmi.id="fd6G8wCdCDOb" text="DONE" usesdiagramusefillcolor="1" font="Bitstream Vera Sans,8,-1,5,50,0,0,0,0,0" linecolor="none" />
|
||||
<statewidget statetype="0" statename="State" usesdiagramfillcolor="1" width="10" x="112" fillcolor="none" y="105" linewidth="none" height="10" usefillcolor="1" isinstance="0" xmi.id="v08PQqjM2BZp" documentation="" usesdiagramusefillcolor="1" font="Bitstream Vera Sans,8,-1,5,50,0,0,0,0,0" linecolor="none" >
|
||||
<Activities/>
|
||||
</statewidget>
|
||||
<floatingtext usesdiagramfillcolor="1" width="58" x="91" fillcolor="none" y="84" linewidth="none" posttext="" role="700" height="19" usefillcolor="1" pretext="" isinstance="0" xmi.id="JJLpsPtBWM5U" text="PENDING" usesdiagramusefillcolor="1" font="Bitstream Vera Sans,8,-1,5,50,0,0,0,0,0" linecolor="none" />
|
||||
<floatingtext usesdiagramfillcolor="1" width="160" x="322" fillcolor="none" y="315" linewidth="none" posttext="" role="700" height="19" usefillcolor="1" pretext="" isinstance="0" xmi.id="YTyyvUNg51nW" text="VMM->deploy(S)[deploy_id]" usesdiagramusefillcolor="1" font="Bitstream Vera Sans,8,-1,5,50,0,0,0,0,0" linecolor="none" />
|
||||
<floatingtext usesdiagramfillcolor="1" width="75" x="119" fillcolor="none" y="119" linewidth="none" posttext="" role="700" height="19" usefillcolor="1" pretext="" isinstance="0" xmi.id="1Q2v6lqhQRX1" text="DM->deploy" usesdiagramusefillcolor="1" font="Bitstream Vera Sans,8,-1,5,50,0,0,0,0,0" linecolor="none" />
|
||||
<floatingtext usesdiagramfillcolor="1" width="214" x="1148" fillcolor="none" y="539" linewidth="none" posttext="" role="700" height="19" usefillcolor="1" pretext="" isinstance="0" xmi.id="4RdrLWpypqv0" text="TM->epilog(S), History[epilog_etime]" usesdiagramusefillcolor="1" font="Bitstream Vera Sans,8,-1,5,50,0,0,0,0,0" linecolor="none" />
|
||||
<floatingtext usesdiagramfillcolor="1" width="214" x="924" fillcolor="none" y="112" linewidth="none" posttext="" role="700" height="19" usefillcolor="1" pretext="" isinstance="0" xmi.id="4RdrLWpypqv0" text="TM->epilog(S), History[epilog_etime]" usesdiagramusefillcolor="1" font="Bitstream Vera Sans,8,-1,5,50,0,0,0,0,0" linecolor="none" />
|
||||
<floatingtext usesdiagramfillcolor="1" width="99" x="672" fillcolor="none" y="385" linewidth="none" posttext="" role="700" height="19" usefillcolor="1" pretext="" isinstance="0" xmi.id="6MtSICEwugLV" text="VMM->deploy(S)" usesdiagramusefillcolor="1" font="Bitstream Vera Sans,8,-1,5,50,0,0,0,0,0" linecolor="none" />
|
||||
<statewidget statetype="1" statename="PROLOG_MIGRATE" usesdiagramfillcolor="0" width="147" x="238" fillcolor="#d6d9e6" y="154" linewidth="none" height="55" usefillcolor="1" isinstance="0" xmi.id="ErxuVz5x9V25" documentation="" usesdiagramusefillcolor="0" font="Bitstream Vera Sans,8,-1,5,50,0,0,0,0,0" linecolor="#4d515b" >
|
||||
<Activities>
|
||||
<Activity name="History[prolog_stime]" />
|
||||
<Activity name="prolog->TM" />
|
||||
</Activities>
|
||||
</statewidget>
|
||||
<floatingtext usesdiagramfillcolor="1" width="166" x="868" fillcolor="none" y="322" linewidth="none" posttext="" role="700" height="19" usefillcolor="1" pretext="" isinstance="0" xmi.id="erh6yR11bFtJ" text="DM->shutdown, DM->cancel" usesdiagramusefillcolor="1" font="Bitstream Vera Sans,8,-1,5,50,0,0,0,0,0" linecolor="none" />
|
||||
<statewidget statetype="0" statename="State" usesdiagramfillcolor="1" width="10" x="203" fillcolor="none" y="427" linewidth="none" height="10" usefillcolor="1" isinstance="0" xmi.id="v08PQqjM2BZp" documentation="" usesdiagramusefillcolor="1" font="Bitstream Vera Sans,8,-1,5,75,0,0,0,0,0" linecolor="none" >
|
||||
<Activities/>
|
||||
</statewidget>
|
||||
<floatingtext usesdiagramfillcolor="1" width="77" x="175" fillcolor="none" y="441" linewidth="none" posttext="" role="700" height="19" usefillcolor="1" pretext="" isinstance="0" xmi.id="9ty8CiwK9AfM" text="SUSPENDED" usesdiagramusefillcolor="1" font="Bitstream Vera Sans,8,-1,5,50,0,0,0,0,0" linecolor="none" />
|
||||
<floatingtext usesdiagramfillcolor="1" width="80" x="217" fillcolor="none" y="399" linewidth="none" posttext="" role="700" height="19" usefillcolor="1" pretext="" isinstance="0" xmi.id="qDWjSKieE3I6" text="DM->restore" usesdiagramusefillcolor="1" font="Bitstream Vera Sans,8,-1,5,50,0,0,0,0,0" linecolor="none" />
|
||||
<statewidget statetype="1" statename="CANCEL" usesdiagramfillcolor="0" width="156" x="819" fillcolor="#d6d9e6" y="413" linewidth="none" height="40" usefillcolor="1" isinstance="0" xmi.id="xLII8ujWwYIl" documentation="" usesdiagramusefillcolor="0" font="Bitstream Vera Sans,8,-1,5,75,0,0,0,0,0" linecolor="#4d515b" >
|
||||
<Activities>
|
||||
<Activity name="History[running_etime]" />
|
||||
</Activities>
|
||||
</statewidget>
|
||||
<floatingtext usesdiagramfillcolor="1" width="74" x="854" fillcolor="none" y="378" linewidth="none" posttext="" role="700" height="19" usefillcolor="1" pretext="" isinstance="0" xmi.id="yE8cnCiAxs9r" text="DM->cancel" usesdiagramusefillcolor="1" font="Bitstream Vera Sans,8,-1,5,50,0,0,0,0,0" linecolor="none" />
|
||||
<floatingtext usesdiagramfillcolor="1" width="108" x="903" fillcolor="none" y="532" linewidth="none" posttext="" role="700" height="19" usefillcolor="1" pretext="" isinstance="0" xmi.id="KhFxNSjvf2qW" text="VMM->cancel(S/F)" usesdiagramusefillcolor="1" font="Bitstream Vera Sans,8,-1,5,50,0,0,0,0,0" linecolor="none" />
|
||||
<floatingtext usesdiagramfillcolor="1" width="225" x="749" fillcolor="none" y="63" linewidth="none" posttext="" role="700" height="19" usefillcolor="1" pretext="" isinstance="0" xmi.id="uW2hUUbihnd4" text="VMM->save(S), History[running_etime]" usesdiagramusefillcolor="1" font="Bitstream Vera Sans,8,-1,5,50,0,0,0,0,0" linecolor="none" />
|
||||
</widgets>
|
||||
<messages/>
|
||||
<associations>
|
||||
<assocwidget totalcounta="2" indexa="1" visibilityB="200" totalcountb="2" indexb="1" linewidth="none" widgetbid="LjaxYzirZB2F" widgetaid="XOHvRm0fOT7w" roleBdoc="" documentation="" roleAdoc="" type="514" changeabilityA="900" changeabilityB="900" linecolor="none" visibilityA="200" >
|
||||
<linepath>
|
||||
<startpoint startx="1141" starty="362" />
|
||||
<endpoint endx="1141" endy="448" />
|
||||
</linepath>
|
||||
</assocwidget>
|
||||
<assocwidget totalcounta="2" indexa="1" visibilityB="200" totalcountb="2" indexb="1" linewidth="none" widgetbid="onNIDRybPMHW" widgetaid="LcVAfNuzcQsQ" roleBdoc="" documentation="" roleAdoc="" type="514" changeabilityA="900" changeabilityB="900" linecolor="none" visibilityA="200" >
|
||||
<linepath>
|
||||
<startpoint startx="938" starty="182" />
|
||||
<endpoint endx="1064" endy="182" />
|
||||
</linepath>
|
||||
</assocwidget>
|
||||
<assocwidget totalcounta="2" indexa="1" visibilityB="200" totalcountb="2" indexb="1" linewidth="none" widgetbid="ARGKD44GM0RC" widgetaid="OzOi91S4erPk" roleBdoc="" documentation="" roleAdoc="" type="514" changeabilityA="900" changeabilityB="900" linecolor="none" visibilityA="200" >
|
||||
<linepath>
|
||||
<startpoint startx="742" starty="105" />
|
||||
<endpoint endx="742" endy="48" />
|
||||
</linepath>
|
||||
</assocwidget>
|
||||
<assocwidget totalcounta="2" indexa="1" visibilityB="200" totalcountb="2" indexb="1" linewidth="none" widgetbid="83PhM2P4GDSS" widgetaid="onNIDRybPMHW" roleBdoc="" documentation="" roleAdoc="" type="514" changeabilityA="900" changeabilityB="900" linecolor="none" visibilityA="200" >
|
||||
<linepath>
|
||||
<startpoint startx="1141" starty="147" />
|
||||
<endpoint endx="1141" endy="64" />
|
||||
</linepath>
|
||||
</assocwidget>
|
||||
<assocwidget totalcounta="2" indexa="1" visibilityB="200" totalcountb="2" indexb="1" linewidth="none" widgetbid="XG1lRRE5w5c1" widgetaid="LjaxYzirZB2F" roleBdoc="" documentation="" roleAdoc="" type="514" changeabilityA="900" changeabilityB="900" linecolor="none" visibilityA="200" >
|
||||
<linepath>
|
||||
<startpoint startx="1141" starty="518" />
|
||||
<endpoint endx="1141" endy="588" />
|
||||
</linepath>
|
||||
</assocwidget>
|
||||
<assocwidget totalcounta="2" indexa="1" visibilityB="200" totalcountb="2" indexb="1" linewidth="none" widgetbid="YuC9L4Z7pwQ2" widgetaid="v08PQqjM2BZp" roleBdoc="" documentation="" roleAdoc="" type="514" changeabilityA="900" changeabilityB="900" linecolor="none" visibilityA="200" >
|
||||
<linepath>
|
||||
<startpoint startx="119" starty="115" />
|
||||
<endpoint endx="119" endy="154" />
|
||||
</linepath>
|
||||
</assocwidget>
|
||||
<assocwidget totalcounta="2" indexa="1" visibilityB="200" totalcountb="3" indexb="1" linewidth="none" widgetbid="MOdjivF4cqzB" widgetaid="YuC9L4Z7pwQ2" roleBdoc="" documentation="" roleAdoc="" type="514" changeabilityA="900" changeabilityB="900" linecolor="none" visibilityA="200" >
|
||||
<linepath>
|
||||
<startpoint startx="119" starty="209" />
|
||||
<endpoint endx="182" endy="308" />
|
||||
</linepath>
|
||||
</assocwidget>
|
||||
<assocwidget totalcounta="2" indexa="1" visibilityB="200" totalcountb="2" indexb="1" linewidth="none" widgetbid="gNq8uGMqbbs2" widgetaid="MOdjivF4cqzB" roleBdoc="" documentation="" roleAdoc="" type="514" changeabilityA="900" changeabilityB="900" linecolor="none" visibilityA="200" >
|
||||
<linepath>
|
||||
<startpoint startx="288" starty="343" />
|
||||
<endpoint endx="630" endy="343" />
|
||||
</linepath>
|
||||
</assocwidget>
|
||||
<assocwidget totalcounta="4" indexa="1" visibilityB="200" totalcountb="3" indexb="1" linewidth="none" widgetbid="wfPL6WFmr5uk" widgetaid="gNq8uGMqbbs2" roleBdoc="" documentation="" roleAdoc="" type="514" changeabilityA="900" changeabilityB="900" linecolor="none" visibilityA="200" >
|
||||
<linepath>
|
||||
<startpoint startx="686" starty="362" />
|
||||
<endpoint endx="553" endy="413" />
|
||||
</linepath>
|
||||
</assocwidget>
|
||||
<assocwidget totalcounta="3" indexa="2" visibilityB="200" totalcountb="4" indexb="2" linewidth="none" widgetbid="gNq8uGMqbbs2" widgetaid="wfPL6WFmr5uk" roleBdoc="" documentation="" roleAdoc="" type="514" changeabilityA="900" changeabilityB="900" linecolor="none" visibilityA="200" >
|
||||
<linepath>
|
||||
<startpoint startx="588" starty="413" />
|
||||
<endpoint endx="742" endy="362" />
|
||||
</linepath>
|
||||
</assocwidget>
|
||||
<assocwidget totalcounta="4" indexa="2" visibilityB="200" totalcountb="2" indexb="1" linewidth="none" widgetbid="OzOi91S4erPk" widgetaid="gNq8uGMqbbs2" roleBdoc="" documentation="" roleAdoc="" type="514" changeabilityA="900" changeabilityB="900" linecolor="none" visibilityA="200" >
|
||||
<linepath>
|
||||
<startpoint startx="742" starty="322" />
|
||||
<endpoint endx="742" endy="145" />
|
||||
</linepath>
|
||||
</assocwidget>
|
||||
<assocwidget totalcounta="4" indexa="1" visibilityB="200" totalcountb="2" indexb="1" linewidth="none" widgetbid="JFYvqOvyWR4f" widgetaid="gNq8uGMqbbs2" roleBdoc="" documentation="" roleAdoc="" type="514" changeabilityA="900" changeabilityB="900" linecolor="none" visibilityA="200" >
|
||||
<linepath>
|
||||
<startpoint startx="686" starty="322" />
|
||||
<endpoint endx="574" endy="201" />
|
||||
</linepath>
|
||||
</assocwidget>
|
||||
<assocwidget totalcounta="4" indexa="3" visibilityB="200" totalcountb="2" indexb="1" linewidth="none" widgetbid="LcVAfNuzcQsQ" widgetaid="gNq8uGMqbbs2" roleBdoc="" documentation="" roleAdoc="" type="514" changeabilityA="900" changeabilityB="900" linecolor="none" visibilityA="200" >
|
||||
<linepath>
|
||||
<startpoint startx="798" starty="322" />
|
||||
<endpoint endx="896" endy="201" />
|
||||
</linepath>
|
||||
</assocwidget>
|
||||
<assocwidget totalcounta="2" indexa="1" visibilityB="200" totalcountb="2" indexb="1" linewidth="none" widgetbid="XOHvRm0fOT7w" widgetaid="gNq8uGMqbbs2" roleBdoc="" documentation="" roleAdoc="" type="514" changeabilityA="900" changeabilityB="900" linecolor="none" visibilityA="200" >
|
||||
<linepath>
|
||||
<startpoint startx="855" starty="343" />
|
||||
<endpoint endx="1057" endy="343" />
|
||||
</linepath>
|
||||
</assocwidget>
|
||||
<assocwidget totalcounta="2" indexa="1" visibilityB="200" totalcountb="3" indexb="3" linewidth="none" widgetbid="MOdjivF4cqzB" widgetaid="ErxuVz5x9V25" roleBdoc="" documentation="" roleAdoc="" type="514" changeabilityA="900" changeabilityB="900" linecolor="none" visibilityA="200" >
|
||||
<linepath>
|
||||
<startpoint startx="315" starty="209" />
|
||||
<endpoint endx="287" endy="308" />
|
||||
</linepath>
|
||||
</assocwidget>
|
||||
<assocwidget totalcounta="2" indexa="1" visibilityB="200" totalcountb="2" indexb="1" linewidth="none" widgetbid="ErxuVz5x9V25" widgetaid="JFYvqOvyWR4f" roleBdoc="" documentation="" roleAdoc="" type="514" changeabilityA="900" changeabilityB="900" linecolor="none" visibilityA="200" >
|
||||
<linepath>
|
||||
<startpoint startx="518" starty="182" />
|
||||
<endpoint endx="385" endy="182" />
|
||||
</linepath>
|
||||
</assocwidget>
|
||||
<assocwidget totalcounta="4" indexa="3" visibilityB="200" totalcountb="2" indexb="1" linewidth="none" widgetbid="xLII8ujWwYIl" widgetaid="gNq8uGMqbbs2" roleBdoc="" documentation="" roleAdoc="" type="514" changeabilityA="900" changeabilityB="900" linecolor="none" visibilityA="200" >
|
||||
<linepath>
|
||||
<startpoint startx="798" starty="362" />
|
||||
<endpoint endx="896" endy="413" />
|
||||
</linepath>
|
||||
</assocwidget>
|
||||
<assocwidget totalcounta="2" indexa="1" visibilityB="200" totalcountb="2" indexb="1" linewidth="none" widgetbid="XG1lRRE5w5c1" widgetaid="xLII8ujWwYIl" roleBdoc="" documentation="" roleAdoc="" type="514" changeabilityA="900" changeabilityB="900" linecolor="none" visibilityA="200" >
|
||||
<linepath>
|
||||
<startpoint startx="896" starty="453" />
|
||||
<endpoint endx="1127" endy="602" />
|
||||
</linepath>
|
||||
</assocwidget>
|
||||
<assocwidget totalcounta="2" indexa="1" visibilityB="200" totalcountb="2" indexb="1" linewidth="none" widgetbid="MOdjivF4cqzB" widgetaid="v08PQqjM2BZp" roleBdoc="" documentation="" roleAdoc="" type="514" changeabilityA="900" changeabilityB="900" linecolor="none" visibilityA="200" >
|
||||
<linepath>
|
||||
<startpoint startx="210" starty="427" />
|
||||
<endpoint endx="210" endy="378" />
|
||||
</linepath>
|
||||
</assocwidget>
|
||||
</associations>
|
||||
</diagram>
|
||||
</diagrams>
|
||||
</XMI.extension>
|
||||
</UML:Model>
|
||||
<UML:Model stereotype="folder" isSpecification="false" isLeaf="false" visibility="public" namespace="m1" xmi.id="Use Case View" isRoot="false" isAbstract="false" name="Use Case View" >
|
||||
<UML:Namespace.ownedElement/>
|
||||
</UML:Model>
|
||||
<UML:Model stereotype="folder" isSpecification="false" isLeaf="false" visibility="public" namespace="m1" xmi.id="Component View" isRoot="false" isAbstract="false" name="Component View" >
|
||||
<UML:Namespace.ownedElement/>
|
||||
</UML:Model>
|
||||
<UML:Model stereotype="folder" isSpecification="false" isLeaf="false" visibility="public" namespace="m1" xmi.id="Deployment View" isRoot="false" isAbstract="false" name="Deployment View" >
|
||||
<UML:Namespace.ownedElement/>
|
||||
</UML:Model>
|
||||
<UML:Model stereotype="folder" isSpecification="false" isLeaf="false" visibility="public" namespace="m1" xmi.id="Entity Relationship Model" isRoot="false" isAbstract="false" name="Entity Relationship Model" >
|
||||
<UML:Namespace.ownedElement/>
|
||||
</UML:Model>
|
||||
</UML:Namespace.ownedElement>
|
||||
</UML:Model>
|
||||
</XMI.content>
|
||||
<XMI.extensions xmi.extender="umbrello" >
|
||||
<docsettings viewid="TmQ0063LG4Sn" documentation="" uniqueid="uW2hUUbihnd4" />
|
||||
<listview>
|
||||
<listitem open="1" type="800" label="Views" >
|
||||
<listitem open="1" type="801" id="Logical View" >
|
||||
<listitem open="0" type="808" id="TmQ0063LG4Sn" label="Life-cycle Manager" />
|
||||
<listitem open="0" type="830" id="Datatypes" >
|
||||
<listitem open="0" type="829" id="XMIKc2o5J6Nu" />
|
||||
<listitem open="1" type="829" id="XNuw315mXeUm" />
|
||||
<listitem open="1" type="829" id="BKzfuxuVlEmK" />
|
||||
<listitem open="1" type="829" id="oRTstiC5X0HW" />
|
||||
<listitem open="1" type="829" id="Nu2tsIN4aMhU" />
|
||||
<listitem open="1" type="829" id="41ex5eEr4fjx" />
|
||||
<listitem open="1" type="829" id="bqKIZpHLv42H" />
|
||||
<listitem open="1" type="829" id="c2eghLb5Fcw6" />
|
||||
<listitem open="0" type="829" id="WUJUz2wkP4qL" />
|
||||
<listitem open="0" type="829" id="mxryNx8LdqSJ" />
|
||||
<listitem open="1" type="829" id="Hby3oiLsjxpm" />
|
||||
<listitem open="0" type="829" id="FRk6rIA1W1VM" />
|
||||
<listitem open="1" type="829" id="EnOdbIq8WtLj" />
|
||||
<listitem open="0" type="829" id="vy53e946a47C" />
|
||||
<listitem open="1" type="829" id="sJASdpuvRqwF" />
|
||||
<listitem open="1" type="829" id="x2fBcbHSsPuV" />
|
||||
<listitem open="1" type="829" id="WF5DDs0nucRc" />
|
||||
</listitem>
|
||||
</listitem>
|
||||
<listitem open="1" type="802" id="Use Case View" />
|
||||
<listitem open="1" type="821" id="Component View" />
|
||||
<listitem open="1" type="827" id="Deployment View" />
|
||||
<listitem open="1" type="836" id="Entity Relationship Model" />
|
||||
</listitem>
|
||||
</listview>
|
||||
<codegeneration>
|
||||
<codegenerator language="C++" />
|
||||
</codegeneration>
|
||||
</XMI.extensions>
|
||||
</XMI>
|
749
share/doc/design/pool.xmi
Normal file
749
share/doc/design/pool.xmi
Normal file
@ -0,0 +1,749 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<XMI xmlns:UML="http://schema.omg.org/spec/UML/1.3" verified="false" timestamp="2008-01-05T01:58:45" xmi.version="1.2" >
|
||||
<XMI.header>
|
||||
<XMI.documentation>
|
||||
<XMI.exporter>umbrello uml modeller http://uml.sf.net</XMI.exporter>
|
||||
<XMI.exporterVersion>1.5.8</XMI.exporterVersion>
|
||||
<XMI.exporterEncoding>UnicodeUTF8</XMI.exporterEncoding>
|
||||
</XMI.documentation>
|
||||
<XMI.metamodel xmi.name="UML" href="UML.xml" xmi.version="1.3" />
|
||||
</XMI.header>
|
||||
<XMI.content>
|
||||
<UML:Model isSpecification="false" isLeaf="false" isRoot="false" xmi.id="m1" isAbstract="false" name="UML Model" >
|
||||
<UML:Namespace.ownedElement>
|
||||
<UML:Stereotype isSpecification="false" isLeaf="false" visibility="public" namespace="m1" xmi.id="folder" isRoot="false" isAbstract="false" name="folder" />
|
||||
<UML:Stereotype isSpecification="false" isLeaf="false" visibility="public" namespace="m1" xmi.id="datatype" isRoot="false" isAbstract="false" name="datatype" />
|
||||
<UML:Stereotype isSpecification="false" isLeaf="false" visibility="public" namespace="m1" xmi.id="interface" isRoot="false" isAbstract="false" name="interface" />
|
||||
<UML:Stereotype isSpecification="false" isLeaf="false" visibility="public" namespace="m1" xmi.id="ActionListener" isRoot="false" isAbstract="false" name="ActionListener" />
|
||||
<UML:Stereotype isSpecification="false" isLeaf="false" visibility="public" namespace="m1" xmi.id="enum" isRoot="false" isAbstract="false" name="enum" />
|
||||
<UML:Model stereotype="folder" isSpecification="false" isLeaf="false" visibility="public" namespace="m1" xmi.id="Logical View" isRoot="false" isAbstract="false" name="Logical View" >
|
||||
<UML:Namespace.ownedElement>
|
||||
<UML:Package stereotype="folder" isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="Datatypes" isRoot="false" isAbstract="false" name="Datatypes" >
|
||||
<UML:Namespace.ownedElement>
|
||||
<UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="bqKIZpHLv42H" isRoot="false" isAbstract="false" name="int" />
|
||||
<UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="oRTstiC5X0HW" isRoot="false" isAbstract="false" name="char" />
|
||||
<UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="BKzfuxuVlEmK" isRoot="false" isAbstract="false" name="bool" />
|
||||
<UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="41ex5eEr4fjx" isRoot="false" isAbstract="false" name="float" />
|
||||
<UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="Nu2tsIN4aMhU" isRoot="false" isAbstract="false" name="double" />
|
||||
<UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="Hby3oiLsjxpm" isRoot="false" isAbstract="false" name="short" />
|
||||
<UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="c2eghLb5Fcw6" isRoot="false" isAbstract="false" name="long" />
|
||||
<UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="sJASdpuvRqwF" isRoot="false" isAbstract="false" name="unsigned int" />
|
||||
<UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="WF5DDs0nucRc" isRoot="false" isAbstract="false" name="unsigned short" />
|
||||
<UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="x2fBcbHSsPuV" isRoot="false" isAbstract="false" name="unsigned long" />
|
||||
<UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="EnOdbIq8WtLj" isRoot="false" isAbstract="false" name="string" />
|
||||
<UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="FRk6rIA1W1VM" isRoot="false" isAbstract="false" name="sqlite3 *" elementReference="vy53e946a47C" />
|
||||
<UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="XMIKc2o5J6Nu" isRoot="false" isAbstract="false" name="ActionListener *" elementReference="Vtec6OvZep7Y" />
|
||||
<UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="WUJUz2wkP4qL" isRoot="false" isAbstract="false" name="map<int,ObjectSQL*>" elementReference="vy53e946a47C" />
|
||||
<UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="XNuw315mXeUm" isRoot="false" isAbstract="false" name="ObjectSQL *" />
|
||||
<UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="vy53e946a47C" isRoot="false" isAbstract="false" name="undef" >
|
||||
<UML:GeneralizableElement.generalization>
|
||||
<UML:Generalization xmi.idref="KOw9slpUVSCK" />
|
||||
</UML:GeneralizableElement.generalization>
|
||||
</UML:DataType>
|
||||
<UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="mxryNx8LdqSJ" isRoot="false" isAbstract="false" name="map<int,attribute>" elementReference="qTRhqpQ0PE3f" />
|
||||
</UML:Namespace.ownedElement>
|
||||
</UML:Package>
|
||||
<UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="ruL8hEHJf71m" name="" >
|
||||
<UML:Association.connection>
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="p1P52D3l7FA2" aggregation="composite" type="vy53e946a47C" name="" />
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="Moy7NJAZQVLD" aggregation="none" type="vy53e946a47C" name="" />
|
||||
</UML:Association.connection>
|
||||
</UML:Association>
|
||||
<UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="hjipPCuUAVPQ" name="" >
|
||||
<UML:Association.connection>
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="GQiBboXQpwTp" aggregation="composite" type="vy53e946a47C" name="" multiplicity="1" />
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="8WbDkjD4WB9t" aggregation="none" type="vy53e946a47C" name="" multiplicity="0..*" />
|
||||
</UML:Association.connection>
|
||||
</UML:Association>
|
||||
<UML:Abstraction isSpecification="false" visibility="public" namespace="Logical View" xmi.id="DCXqsURB7Car" client="vy53e946a47C" name="" supplier="vy53e946a47C" />
|
||||
<UML:Abstraction isSpecification="false" visibility="public" namespace="Logical View" xmi.id="VvRc5zSWiu2N" client="vy53e946a47C" name="" supplier="vy53e946a47C" />
|
||||
<UML:Abstraction isSpecification="false" visibility="public" namespace="Logical View" xmi.id="Gq5yk7K4083P" client="vy53e946a47C" name="" supplier="vy53e946a47C" />
|
||||
<UML:Abstraction isSpecification="false" visibility="public" namespace="Logical View" xmi.id="eHdeNg3WcYlX" client="vy53e946a47C" name="" supplier="vy53e946a47C" />
|
||||
<UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="Are2UTPMWnQH" name="" >
|
||||
<UML:Association.connection>
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="SJQspl439kCk" aggregation="composite" type="vy53e946a47C" name="" />
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="Yj8LeZ9m4kzo" aggregation="none" type="vy53e946a47C" name="" />
|
||||
</UML:Association.connection>
|
||||
</UML:Association>
|
||||
<UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="CwDiWUhJndUK" name="" >
|
||||
<UML:Association.connection>
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="RAqxL0ooJEe6" aggregation="composite" type="vy53e946a47C" name="" />
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="zg87RKpz4yJg" aggregation="none" type="vy53e946a47C" name="" />
|
||||
</UML:Association.connection>
|
||||
</UML:Association>
|
||||
<UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="ZPsL0MdKjRuq" name="" >
|
||||
<UML:Association.connection>
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="VSSZAPNZZCXs" aggregation="composite" type="vy53e946a47C" name="" />
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="CLgTYJYVzgcO" aggregation="none" type="vy53e946a47C" name="" />
|
||||
</UML:Association.connection>
|
||||
</UML:Association>
|
||||
<UML:Generalization isSpecification="false" child="vy53e946a47C" visibility="public" namespace="Logical View" xmi.id="KOw9slpUVSCK" parent="vy53e946a47C" discriminator="" name="" />
|
||||
<UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="Zew276Kva1UC" name="" >
|
||||
<UML:Association.connection>
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="0SO2Ofgt58RF" aggregation="composite" type="vy53e946a47C" name="" />
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="Vom20HvAbZe9" aggregation="none" type="vy53e946a47C" name="" />
|
||||
</UML:Association.connection>
|
||||
</UML:Association>
|
||||
<UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="8OffyHH7J51e" name="" >
|
||||
<UML:Association.connection>
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="sCeqqFEohap3" aggregation="composite" type="vy53e946a47C" name="" />
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="DVuIcLV78IA6" aggregation="none" type="vy53e946a47C" name="" />
|
||||
</UML:Association.connection>
|
||||
</UML:Association>
|
||||
<UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="rLzAQznN0fxo" name="" >
|
||||
<UML:Association.connection>
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="Z5HAetJV5wLv" aggregation="composite" type="vy53e946a47C" name="" />
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="BXhq6WrJ2lce" aggregation="none" type="vy53e946a47C" name="" multiplicity="2" />
|
||||
</UML:Association.connection>
|
||||
</UML:Association>
|
||||
<UML:Interface stereotype="interface" isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="Vtec6OvZep7Y" isRoot="false" isAbstract="true" name="ActionListener" >
|
||||
<UML:Classifier.feature>
|
||||
<UML:Operation isSpecification="false" isLeaf="false" visibility="public" xmi.id="r5wKwYx2uqZZ" isRoot="false" isAbstract="true" isQuery="false" name="do_action" >
|
||||
<UML:BehavioralFeature.parameter>
|
||||
<UML:Parameter isSpecification="false" visibility="private" xmi.id="08TU5pmjXwFJ" value="" type="EnOdbIq8WtLj" name="actionName" />
|
||||
<UML:Parameter isSpecification="false" visibility="private" xmi.id="imunZeU6akNO" value="" type="vy53e946a47C" name="actionArgs" />
|
||||
</UML:BehavioralFeature.parameter>
|
||||
</UML:Operation>
|
||||
</UML:Classifier.feature>
|
||||
</UML:Interface>
|
||||
<UML:Class isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="lSGAN6DHQApL" isRoot="false" isAbstract="false" name="ActionManager" >
|
||||
<UML:Classifier.feature>
|
||||
<UML:Attribute isSpecification="false" visibility="private" xmi.id="PnRpA2YxeF9Y" type="vy53e946a47C" name="actionList" />
|
||||
<UML:Attribute isSpecification="false" visibility="private" xmi.id="THHIdjRDCzRQ" type="XMIKc2o5J6Nu" name="listener" />
|
||||
<UML:Operation isSpecification="false" isLeaf="false" visibility="public" xmi.id="qFxhNZSAMMR4" isRoot="false" isAbstract="false" isQuery="false" name="loop" >
|
||||
<UML:BehavioralFeature.parameter>
|
||||
<UML:Parameter isSpecification="false" visibility="private" xmi.id="rZIavc3WN6NS" value="" type="vy53e946a47C" name="timeout" />
|
||||
<UML:Parameter isSpecification="false" visibility="private" xmi.id="srF5iDwHTUD3" value="" type="vy53e946a47C" name="timerArgs" />
|
||||
</UML:BehavioralFeature.parameter>
|
||||
</UML:Operation>
|
||||
<UML:Operation isSpecification="false" isLeaf="false" visibility="public" xmi.id="MKeaF4nJSUdl" isRoot="false" isAbstract="false" isQuery="false" name="trigger" >
|
||||
<UML:BehavioralFeature.parameter>
|
||||
<UML:Parameter isSpecification="false" visibility="private" xmi.id="EEPPaloeiEww" value="" type="EnOdbIq8WtLj" name="action" />
|
||||
<UML:Parameter isSpecification="false" visibility="private" xmi.id="WG7hKdMiEPZy" value="" type="vy53e946a47C" name="args" />
|
||||
</UML:BehavioralFeature.parameter>
|
||||
</UML:Operation>
|
||||
<UML:Operation isSpecification="false" isLeaf="false" visibility="public" xmi.id="STOhI1BX7rpi" isRoot="false" isAbstract="false" isQuery="false" name="addListener" >
|
||||
<UML:BehavioralFeature.parameter>
|
||||
<UML:Parameter isSpecification="false" visibility="private" xmi.id="CB0SMWSFO6hr" value="" type="XMIKc2o5J6Nu" name="listener" />
|
||||
</UML:BehavioralFeature.parameter>
|
||||
</UML:Operation>
|
||||
</UML:Classifier.feature>
|
||||
</UML:Class>
|
||||
<UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="N2IAYOSx9uEH" name="" >
|
||||
<UML:Association.connection>
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="bBKdwuH111CP" aggregation="composite" type="Vtec6OvZep7Y" name="" />
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="uUMr2TQUsUyD" aggregation="none" type="lSGAN6DHQApL" name="" />
|
||||
</UML:Association.connection>
|
||||
</UML:Association>
|
||||
<UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="adQpG9tPizWw" name="" >
|
||||
<UML:Association.connection>
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="rMhlR1k0C2e9" aggregation="composite" type="lSGAN6DHQApL" name="" />
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="wt8vsLIlneap" aggregation="none" type="Vtec6OvZep7Y" name="" />
|
||||
</UML:Association.connection>
|
||||
</UML:Association>
|
||||
<UML:Class stereotype="ActionListener" isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="v1Qyt5PysrV2" isRoot="false" isAbstract="false" name="ExampleManager" >
|
||||
<UML:Classifier.feature>
|
||||
<UML:Attribute isSpecification="false" visibility="public" xmi.id="y1DwtRnk4cXj" type="lSGAN6DHQApL" name="am" />
|
||||
<UML:Operation isSpecification="false" isLeaf="false" visibility="public" xmi.id="Wbx0pbNT3TB4" isRoot="false" isAbstract="false" isQuery="false" name="do_action" >
|
||||
<UML:BehavioralFeature.parameter>
|
||||
<UML:Parameter isSpecification="false" visibility="private" xmi.id="1UA1ujuNmUZI" value="" type="EnOdbIq8WtLj" name="actionName" />
|
||||
<UML:Parameter isSpecification="false" visibility="private" xmi.id="AA353JgE6fjG" value="" type="vy53e946a47C" name="actionArgs" />
|
||||
</UML:BehavioralFeature.parameter>
|
||||
</UML:Operation>
|
||||
</UML:Classifier.feature>
|
||||
</UML:Class>
|
||||
<UML:Abstraction isSpecification="false" visibility="public" namespace="Logical View" xmi.id="iNuf7uC50BLw" client="v1Qyt5PysrV2" name="" supplier="Vtec6OvZep7Y" />
|
||||
<UML:Class isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="FTcjgY1ruC0v" isRoot="false" isAbstract="false" name="ObjectSQL" >
|
||||
<UML:Classifier.feature>
|
||||
<UML:Attribute isSpecification="false" visibility="private" xmi.id="1oS3xv31KiB4" type="bqKIZpHLv42H" name="oid" />
|
||||
<UML:Attribute isSpecification="false" visibility="private" xmi.id="ixTgs2fhSgcN" type="ypAsly1Z2KtR" name="mutex" />
|
||||
<UML:Operation isSpecification="false" isLeaf="false" visibility="public" xmi.id="nbM2o3ajdhrk" isRoot="false" isAbstract="false" isQuery="false" name="lock" />
|
||||
<UML:Operation isSpecification="false" isLeaf="false" visibility="public" xmi.id="cYMrUig7UHTW" isRoot="false" isAbstract="false" isQuery="false" name="unlock" />
|
||||
<UML:Operation isSpecification="false" isLeaf="false" visibility="public" xmi.id="IDwc2QJgWnvx" isRoot="false" isAbstract="true" isQuery="false" name="select" >
|
||||
<UML:BehavioralFeature.parameter>
|
||||
<UML:Parameter isSpecification="false" visibility="private" xmi.id="XAJL1i0cYd38" value="" type="FRk6rIA1W1VM" name="db" />
|
||||
</UML:BehavioralFeature.parameter>
|
||||
</UML:Operation>
|
||||
<UML:Operation isSpecification="false" isLeaf="false" visibility="public" xmi.id="M1RmI6G51EM0" isRoot="false" isAbstract="true" isQuery="false" name="insert" >
|
||||
<UML:BehavioralFeature.parameter>
|
||||
<UML:Parameter isSpecification="false" visibility="private" xmi.id="t0UviVXF8YLM" value="" type="FRk6rIA1W1VM" name="db" />
|
||||
</UML:BehavioralFeature.parameter>
|
||||
</UML:Operation>
|
||||
</UML:Classifier.feature>
|
||||
</UML:Class>
|
||||
<UML:Class isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="QzClxwWHdfMc" isRoot="false" isAbstract="false" name="PoolSQL" >
|
||||
<UML:Classifier.feature>
|
||||
<UML:Attribute isSpecification="false" visibility="private" xmi.id="ufg9C6NNEIhF" type="bqKIZpHLv42H" name="lastOID" />
|
||||
<UML:Attribute isSpecification="false" visibility="private" xmi.id="FZr0VlUmM86y" type="WUJUz2wkP4qL" name="pool" />
|
||||
<UML:Attribute isSpecification="false" visibility="private" xmi.id="ItJ2xkSJdUgP" type="FRk6rIA1W1VM" name="db" />
|
||||
<UML:Operation isSpecification="false" isLeaf="false" visibility="private" xmi.id="nTmQ2dvvUMVn" isRoot="false" isAbstract="true" isQuery="false" name="initLastOID" />
|
||||
<UML:Operation isSpecification="false" isLeaf="false" visibility="private" xmi.id="vcv2H4PsHW1N" isRoot="false" isAbstract="true" isQuery="false" name="create" >
|
||||
<UML:BehavioralFeature.parameter>
|
||||
<UML:Parameter kind="return" xmi.id="xOMjFuuBaxiB" type="XNuw315mXeUm" />
|
||||
</UML:BehavioralFeature.parameter>
|
||||
</UML:Operation>
|
||||
<UML:Operation isSpecification="false" isLeaf="false" visibility="public" xmi.id="tZBwi4Zb7qdU" isRoot="false" isAbstract="false" isQuery="false" name="allocate" >
|
||||
<UML:BehavioralFeature.parameter>
|
||||
<UML:Parameter kind="return" xmi.id="caYspxUlaybN" type="bqKIZpHLv42H" />
|
||||
<UML:Parameter isSpecification="false" visibility="private" xmi.id="gGjXn5Sh8Rku" value="" type="XNuw315mXeUm" name="obj" />
|
||||
</UML:BehavioralFeature.parameter>
|
||||
</UML:Operation>
|
||||
<UML:Operation isSpecification="false" isLeaf="false" visibility="public" xmi.id="4HEQcydWqn6n" isRoot="false" isAbstract="false" isQuery="false" name="get" >
|
||||
<UML:BehavioralFeature.parameter>
|
||||
<UML:Parameter kind="return" xmi.id="XWMuNb4DpWFh" type="XNuw315mXeUm" />
|
||||
<UML:Parameter isSpecification="false" visibility="private" xmi.id="JCfn5YzTBFJW" value="" type="bqKIZpHLv42H" name="oid" />
|
||||
<UML:Parameter isSpecification="false" visibility="private" xmi.id="rGU4tF7PEYbS" value="" type="BKzfuxuVlEmK" name="lock" />
|
||||
</UML:BehavioralFeature.parameter>
|
||||
</UML:Operation>
|
||||
</UML:Classifier.feature>
|
||||
</UML:Class>
|
||||
<UML:Dependency isSpecification="false" visibility="public" namespace="Logical View" xmi.id="3a0CTjhkgTis" client="QzClxwWHdfMc" name="" supplier="FTcjgY1ruC0v" />
|
||||
<UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="fvsi8gCLNwfR" name="" >
|
||||
<UML:Association.connection>
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="khNKXOHOAGRv" aggregation="aggregate" type="QzClxwWHdfMc" name="" />
|
||||
<UML:AssociationEnd isSpecification="false" visibility="private" changeability="changeable" isNavigable="true" xmi.id="qcdHvDaV6dud" aggregation="none" type="FTcjgY1ruC0v" name="pool" multiplicity="0..*" />
|
||||
</UML:Association.connection>
|
||||
</UML:Association>
|
||||
<UML:Class isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="KCAGyFqIpgL0" isRoot="false" isAbstract="false" name="VMPool" >
|
||||
<UML:GeneralizableElement.generalization>
|
||||
<UML:Generalization xmi.idref="udobO5QNil4Q" />
|
||||
</UML:GeneralizableElement.generalization>
|
||||
</UML:Class>
|
||||
<UML:Generalization isSpecification="false" child="KCAGyFqIpgL0" visibility="public" namespace="Logical View" xmi.id="udobO5QNil4Q" parent="QzClxwWHdfMc" discriminator="" name="" />
|
||||
<UML:Class isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="7a8pQxuHOv3I" isRoot="false" isAbstract="false" name="VM" >
|
||||
<UML:GeneralizableElement.generalization>
|
||||
<UML:Generalization xmi.idref="JLylJCkYo23X" />
|
||||
</UML:GeneralizableElement.generalization>
|
||||
<UML:Classifier.feature>
|
||||
<UML:Attribute isSpecification="false" visibility="public" xmi.id="I1swDie713Rd" type="HyJpS3PRU1Kj" name="template" />
|
||||
<UML:Attribute isSpecification="false" visibility="public" xmi.id="qJQVdL68irlQ" type="z7Dg2MlvQ7CM" name="history" />
|
||||
<UML:Attribute isSpecification="false" visibility="public" xmi.id="c5qYO6nEljFF" type="bqKIZpHLv42H" name="uid" />
|
||||
<UML:Attribute isSpecification="false" visibility="public" xmi.id="C2CvmPBZYxhn" type="EnOdbIq8WtLj" name="directory" />
|
||||
<UML:Attribute isSpecification="false" visibility="private" xmi.id="1MY8bxtpD5th" type="XnOFdBKmjtR7" name="state" />
|
||||
<UML:Operation isSpecification="false" isLeaf="false" visibility="public" xmi.id="3hebSdUOoDAF" isRoot="false" isAbstract="false" isQuery="false" name="select" >
|
||||
<UML:BehavioralFeature.parameter>
|
||||
<UML:Parameter isSpecification="false" visibility="private" xmi.id="a1xZbOKW0R5l" value="" type="FRk6rIA1W1VM" name="db" />
|
||||
</UML:BehavioralFeature.parameter>
|
||||
</UML:Operation>
|
||||
<UML:Operation isSpecification="false" isLeaf="false" visibility="public" xmi.id="4ICQgXHT7GOe" isRoot="false" isAbstract="false" isQuery="false" name="insert" >
|
||||
<UML:BehavioralFeature.parameter>
|
||||
<UML:Parameter isSpecification="false" visibility="private" xmi.id="fy1W6wbM6z0d" value="" type="FRk6rIA1W1VM" name="db" />
|
||||
</UML:BehavioralFeature.parameter>
|
||||
</UML:Operation>
|
||||
</UML:Classifier.feature>
|
||||
</UML:Class>
|
||||
<UML:Generalization isSpecification="false" child="7a8pQxuHOv3I" visibility="public" namespace="Logical View" xmi.id="JLylJCkYo23X" parent="FTcjgY1ruC0v" discriminator="" name="" />
|
||||
<UML:Class isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="z7Dg2MlvQ7CM" isRoot="false" isAbstract="false" name="History" >
|
||||
<UML:Classifier.feature>
|
||||
<UML:Attribute isSpecification="false" visibility="private" xmi.id="QcFMJ056hrSv" type="m0Kw7a2RrIht" name="stime" />
|
||||
<UML:Attribute isSpecification="false" visibility="private" xmi.id="x7VATmBXqsOJ" type="m0Kw7a2RrIht" name="etime" />
|
||||
</UML:Classifier.feature>
|
||||
</UML:Class>
|
||||
<UML:Class isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="HyJpS3PRU1Kj" isRoot="false" isAbstract="false" name="Template" >
|
||||
<UML:Classifier.feature>
|
||||
<UML:Attribute isSpecification="false" visibility="private" xmi.id="Q6C0ik7hGMJ2" type="mxryNx8LdqSJ" name="attributes" />
|
||||
</UML:Classifier.feature>
|
||||
</UML:Class>
|
||||
<UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="Kq40rRjmpqxB" name="" >
|
||||
<UML:Association.connection>
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="fg33zGJS152Q" aggregation="composite" type="HyJpS3PRU1Kj" name="" />
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="kE4SbYlkuKKX" aggregation="none" type="7a8pQxuHOv3I" name="" />
|
||||
</UML:Association.connection>
|
||||
</UML:Association>
|
||||
<UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="F77Ohxt9mWLc" name="" >
|
||||
<UML:Association.connection>
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="VqlWikfMRgPO" aggregation="composite" type="HyJpS3PRU1Kj" name="" />
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="wgqwltMU5Owg" aggregation="none" type="7a8pQxuHOv3I" name="" />
|
||||
</UML:Association.connection>
|
||||
</UML:Association>
|
||||
<UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="SlsDHDpgpvdB" name="" >
|
||||
<UML:Association.connection>
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="wfPqzjLTY7zG" aggregation="composite" type="7a8pQxuHOv3I" name="" />
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="pdcGJzfGgTAP" aggregation="none" type="HyJpS3PRU1Kj" name="template" multiplicity="1" />
|
||||
</UML:Association.connection>
|
||||
</UML:Association>
|
||||
<UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="XhoKcPVkULbi" name="" >
|
||||
<UML:Association.connection>
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="KUtPso4mTTaR" aggregation="composite" type="7a8pQxuHOv3I" name="" />
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="Awui1txqWZ5q" aggregation="none" type="z7Dg2MlvQ7CM" name="history" multiplicity="1" />
|
||||
</UML:Association.connection>
|
||||
</UML:Association>
|
||||
<UML:Class isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="m0Kw7a2RrIht" isRoot="false" isAbstract="false" name="time_t" />
|
||||
<UML:Enumeration stereotype="enum" isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="XnOFdBKmjtR7" isRoot="false" isAbstract="false" name="VM_STATE" >
|
||||
<UML:EnumerationLiteral isSpecification="false" isLeaf="false" visibility="public" namespace="XnOFdBKmjtR7" xmi.id="ZrmvfBSRZf4i" isRoot="false" isAbstract="false" name="LM_STATE_INIT" />
|
||||
<UML:EnumerationLiteral isSpecification="false" isLeaf="false" visibility="public" namespace="XnOFdBKmjtR7" xmi.id="Pk8VgQdGINBv" isRoot="false" isAbstract="false" name="LM_STATE_PENDING" />
|
||||
<UML:EnumerationLiteral isSpecification="false" isLeaf="false" visibility="public" namespace="XnOFdBKmjtR7" xmi.id="j0GohzR4iZYO" isRoot="false" isAbstract="false" name="LM_STATE_ACTIVE" />
|
||||
</UML:Enumeration>
|
||||
<UML:Class isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="qTRhqpQ0PE3f" isRoot="false" isAbstract="false" name="map" />
|
||||
<UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="NbGlbdxcIjX9" name="" >
|
||||
<UML:Association.connection>
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="false" xmi.id="Q026SwcirsQG" aggregation="none" type="KCAGyFqIpgL0" name="" />
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="jYnVZ2HTHrr1" aggregation="none" type="7a8pQxuHOv3I" name="" />
|
||||
</UML:Association.connection>
|
||||
</UML:Association>
|
||||
<UML:Class isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="ypAsly1Z2KtR" isRoot="false" isAbstract="false" name="pthread_mutex_t" />
|
||||
</UML:Namespace.ownedElement>
|
||||
<XMI.extension xmi.extender="umbrello" >
|
||||
<diagrams>
|
||||
<diagram snapgrid="1" showattsig="1" fillcolor="#e0e4c5" linewidth="0" zoom="100" showgrid="1" showopsig="1" usefillcolor="1" snapx="7" canvaswidth="806" snapy="7" showatts="1" xmi.id="DpoC0D4VUaxG" documentation="" type="1" showops="1" showpackage="0" name="VMpool" localid="" showstereotype="0" showscope="1" snapcsgrid="0" font="Bitstream Vera Sans,8,-1,5,50,0,0,0,0,0" linecolor="#312e2a" canvasheight="560" >
|
||||
<widgets>
|
||||
<classwidget usesdiagramfillcolor="0" width="161" showattsigs="601" x="427" fillcolor="#e0e4c5" y="28" showopsigs="601" linewidth="none" height="105" usefillcolor="1" showpubliconly="0" showattributes="1" isinstance="0" xmi.id="FTcjgY1ruC0v" showoperations="1" showpackage="0" showscope="1" usesdiagramusefillcolor="0" font="Bitstream Vera Sans,8,-1,5,50,1,0,0,0,0" linecolor="#312e2a" />
|
||||
<classwidget usesdiagramfillcolor="0" width="234" showattsigs="601" x="21" fillcolor="#e0e4c5" y="21" showopsigs="601" linewidth="none" height="120" usefillcolor="1" showpubliconly="0" showattributes="1" isinstance="0" xmi.id="QzClxwWHdfMc" showoperations="1" showpackage="0" showscope="1" usesdiagramusefillcolor="0" font="Bitstream Vera Sans,8,-1,5,50,0,0,0,0,0" linecolor="#312e2a" />
|
||||
<classwidget usesdiagramfillcolor="1" width="59" showattsigs="601" x="112" fillcolor="none" y="238" showopsigs="601" linewidth="none" height="29" usefillcolor="1" showpubliconly="0" showattributes="1" isinstance="0" xmi.id="KCAGyFqIpgL0" showoperations="1" showpackage="0" showscope="1" usesdiagramusefillcolor="1" font="Bitstream Vera Sans,8,-1,5,50,0,0,0,0,0" linecolor="none" />
|
||||
<classwidget usesdiagramfillcolor="0" width="139" showattsigs="601" x="441" fillcolor="#e0e4c5" y="189" showopsigs="601" linewidth="none" height="120" usefillcolor="1" showpubliconly="0" showattributes="1" isinstance="0" xmi.id="7a8pQxuHOv3I" showoperations="1" showpackage="0" showscope="1" usesdiagramusefillcolor="0" font="Bitstream Vera Sans,8,-1,5,75,0,0,0,0,0" linecolor="#312e2a" />
|
||||
<classwidget usesdiagramfillcolor="0" width="98" showattsigs="601" x="672" fillcolor="#e0e4c5" y="308" showopsigs="601" linewidth="none" height="52" usefillcolor="1" showpubliconly="0" showattributes="1" isinstance="0" xmi.id="z7Dg2MlvQ7CM" showoperations="1" showpackage="0" showscope="1" usesdiagramusefillcolor="0" font="Bitstream Vera Sans,8,-1,5,50,0,0,0,0,0" linecolor="#312e2a" />
|
||||
<classwidget usesdiagramfillcolor="0" width="195" showattsigs="601" x="602" fillcolor="#e0e4c5" y="140" showopsigs="601" linewidth="none" height="37" usefillcolor="1" showpubliconly="0" showattributes="1" isinstance="0" xmi.id="HyJpS3PRU1Kj" showoperations="1" showpackage="0" showscope="1" usesdiagramusefillcolor="0" font="Bitstream Vera Sans,8,-1,5,50,0,0,0,0,0" linecolor="#312e2a" />
|
||||
<enumwidget usesdiagramfillcolor="0" width="123" x="448" fillcolor="#e0e4c5" y="364" linewidth="none" height="75" usefillcolor="1" isinstance="0" xmi.id="XnOFdBKmjtR7" showpackage="0" usesdiagramusefillcolor="0" font="Bitstream Vera Sans,8,-1,5,75,0,0,0,0,0" linecolor="#312e2a" />
|
||||
</widgets>
|
||||
<messages/>
|
||||
<associations>
|
||||
<assocwidget totalcounta="2" indexa="1" totalcountb="2" indexb="1" linewidth="none" widgetbid="FTcjgY1ruC0v" widgetaid="QzClxwWHdfMc" xmi.id="fvsi8gCLNwfR" type="501" linecolor="none" >
|
||||
<linepath>
|
||||
<startpoint startx="255" starty="84" />
|
||||
<endpoint endx="427" endy="84" />
|
||||
</linepath>
|
||||
<floatingtext usesdiagramfillcolor="1" width="29" x="399" fillcolor="none" y="63" linewidth="none" posttext="" role="702" height="19" usefillcolor="1" pretext="" isinstance="0" xmi.id="HkoWZfV3hlw0" text="0..*" usesdiagramusefillcolor="1" font="Bitstream Vera Sans,8,-1,5,50,0,0,0,0,0" linecolor="none" />
|
||||
<floatingtext usesdiagramfillcolor="1" width="36" x="392" fillcolor="none" y="84" linewidth="none" posttext="" role="710" height="19" usefillcolor="1" pretext="-" isinstance="0" xmi.id="OQpDGFRzmETL" text="pool" usesdiagramusefillcolor="1" font="Bitstream Vera Sans,8,-1,5,50,0,0,0,0,0" linecolor="none" />
|
||||
</assocwidget>
|
||||
<assocwidget totalcounta="2" indexa="1" totalcountb="2" indexb="1" linewidth="none" widgetbid="QzClxwWHdfMc" widgetaid="KCAGyFqIpgL0" xmi.id="udobO5QNil4Q" type="500" linecolor="none" >
|
||||
<linepath>
|
||||
<startpoint startx="140" starty="238" />
|
||||
<endpoint endx="140" endy="141" />
|
||||
</linepath>
|
||||
</assocwidget>
|
||||
<assocwidget totalcounta="2" indexa="1" totalcountb="2" indexb="1" linewidth="none" widgetbid="FTcjgY1ruC0v" widgetaid="7a8pQxuHOv3I" xmi.id="JLylJCkYo23X" type="500" linecolor="none" >
|
||||
<linepath>
|
||||
<startpoint startx="511" starty="189" />
|
||||
<endpoint endx="511" endy="133" />
|
||||
</linepath>
|
||||
</assocwidget>
|
||||
<assocwidget totalcounta="3" indexa="1" visibilityB="200" totalcountb="2" indexb="1" linewidth="none" widgetbid="HyJpS3PRU1Kj" widgetaid="7a8pQxuHOv3I" xmi.id="I1swDie713Rd" type="510" changeabilityA="900" changeabilityB="900" linecolor="none" visibilityA="200" >
|
||||
<linepath>
|
||||
<startpoint startx="580" starty="231" />
|
||||
<endpoint endx="700" endy="177" />
|
||||
</linepath>
|
||||
<floatingtext usesdiagramfillcolor="1" width="67" x="630" fillcolor="none" y="196" linewidth="none" posttext="" role="710" height="19" usefillcolor="1" pretext="+" isinstance="0" xmi.id="TLj9nUGBu6N9" text="template" usesdiagramusefillcolor="1" font="Bitstream Vera Sans,8,-1,5,50,0,0,0,0,0" linecolor="none" />
|
||||
</assocwidget>
|
||||
<assocwidget totalcounta="3" indexa="2" visibilityB="200" totalcountb="2" indexb="1" linewidth="none" widgetbid="z7Dg2MlvQ7CM" widgetaid="7a8pQxuHOv3I" xmi.id="qJQVdL68irlQ" type="510" changeabilityA="900" changeabilityB="900" linecolor="none" visibilityA="200" >
|
||||
<linepath>
|
||||
<startpoint startx="580" starty="273" />
|
||||
<endpoint endx="672" endy="336" />
|
||||
</linepath>
|
||||
<floatingtext usesdiagramfillcolor="1" width="56" x="623" fillcolor="none" y="315" linewidth="none" posttext="" role="710" height="19" usefillcolor="1" pretext="+" isinstance="0" xmi.id="Lo873bQIJEos" text="history" usesdiagramusefillcolor="1" font="Bitstream Vera Sans,8,-1,5,50,0,0,0,0,0" linecolor="none" />
|
||||
</assocwidget>
|
||||
<assocwidget totalcounta="2" indexa="1" visibilityB="200" totalcountb="2" indexb="1" linewidth="none" widgetbid="XnOFdBKmjtR7" widgetaid="7a8pQxuHOv3I" xmi.id="1MY8bxtpD5th" type="510" changeabilityA="900" changeabilityB="900" linecolor="none" visibilityA="200" >
|
||||
<linepath>
|
||||
<startpoint startx="511" starty="309" />
|
||||
<endpoint endx="511" endy="364" />
|
||||
</linepath>
|
||||
<floatingtext usesdiagramfillcolor="1" width="41" x="476" fillcolor="none" y="343" linewidth="none" posttext="" role="710" height="19" usefillcolor="1" pretext="-" isinstance="0" xmi.id="sJtZ4pXVBEcy" text="state" usesdiagramusefillcolor="1" font="Bitstream Vera Sans,8,-1,5,50,0,0,0,0,0" linecolor="none" />
|
||||
</assocwidget>
|
||||
<assocwidget totalcounta="2" indexa="1" totalcountb="2" indexb="1" linewidth="none" widgetbid="7a8pQxuHOv3I" widgetaid="KCAGyFqIpgL0" xmi.id="NbGlbdxcIjX9" type="512" linecolor="none" >
|
||||
<linepath>
|
||||
<startpoint startx="171" starty="252" />
|
||||
<endpoint endx="441" endy="252" />
|
||||
</linepath>
|
||||
</assocwidget>
|
||||
</associations>
|
||||
</diagram>
|
||||
<diagram snapgrid="0" showattsig="1" fillcolor="#eee9e9" linewidth="0" zoom="100" showgrid="1" showopsig="1" usefillcolor="1" snapx="10" canvaswidth="806" snapy="10" showatts="1" xmi.id="tJJXQ7qLTGJd" documentation="" type="1" showops="1" showpackage="0" name="Action" localid="" showstereotype="0" showscope="1" snapcsgrid="0" font="Bitstream Vera Sans,8,-1,5,50,0,0,0,0,0" linecolor="#8b8989" canvasheight="560" >
|
||||
<widgets>
|
||||
<interfacewidget usesdiagramfillcolor="0" width="307" x="387" fillcolor="#eee9e9" y="34" drawascircle="0" showopsigs="601" linewidth="none" height="52" usefillcolor="1" showpubliconly="0" isinstance="0" xmi.id="Vtec6OvZep7Y" showoperations="1" showpackage="0" showscope="1" showstereotype="1" usesdiagramusefillcolor="0" font="Bitstream Vera Sans,8,-1,5,50,0,0,0,0,0" linecolor="#8b8989" />
|
||||
<classwidget usesdiagramfillcolor="0" width="251" showattsigs="601" x="20" fillcolor="#eee9e9" y="15" showopsigs="601" linewidth="none" height="90" usefillcolor="1" showpubliconly="0" showattributes="1" isinstance="0" xmi.id="lSGAN6DHQApL" showoperations="1" showpackage="0" showscope="1" usesdiagramusefillcolor="0" font="Bitstream Vera Sans,8,-1,5,50,0,0,0,0,0" linecolor="#8b8989" />
|
||||
<classwidget usesdiagramfillcolor="0" width="307" showattsigs="601" x="191" fillcolor="#99cccc" y="171" showopsigs="601" linewidth="none" height="57" usefillcolor="1" showpubliconly="0" showattributes="1" isinstance="0" xmi.id="v1Qyt5PysrV2" showoperations="1" showpackage="0" showscope="1" usesdiagramusefillcolor="0" font="Bitstream Vera Sans,8,-1,5,50,0,0,0,0,0" linecolor="#8b8989" />
|
||||
</widgets>
|
||||
<messages/>
|
||||
<associations>
|
||||
<assocwidget totalcounta="2" indexa="1" visibilityB="200" totalcountb="2" indexb="1" linewidth="none" widgetbid="Vtec6OvZep7Y" widgetaid="lSGAN6DHQApL" xmi.id="THHIdjRDCzRQ" type="501" changeabilityA="900" changeabilityB="900" linecolor="none" visibilityA="200" >
|
||||
<linepath>
|
||||
<startpoint startx="271" starty="60" />
|
||||
<endpoint endx="387" endy="60" />
|
||||
</linepath>
|
||||
<floatingtext usesdiagramfillcolor="1" width="30" x="353" fillcolor="none" y="44" linewidth="none" posttext="" role="702" height="19" usefillcolor="1" pretext="" isinstance="0" xmi.id="Soam3OctfWQj" text="0..1" usesdiagramusefillcolor="1" font="Bitstream Vera Sans,8,-1,5,50,0,0,0,0,0" linecolor="none" />
|
||||
<floatingtext usesdiagramfillcolor="1" width="55" x="330" fillcolor="none" y="61" linewidth="none" posttext="" role="710" height="19" usefillcolor="1" pretext="-" isinstance="0" xmi.id="jt8bzTkIHtOI" text="listener" usesdiagramusefillcolor="1" font="Bitstream Vera Sans,8,-1,5,50,0,0,0,0,0" linecolor="none" />
|
||||
</assocwidget>
|
||||
<assocwidget totalcounta="3" indexa="1" visibilityB="200" totalcountb="2" indexb="1" linewidth="none" widgetbid="lSGAN6DHQApL" widgetaid="v1Qyt5PysrV2" xmi.id="y1DwtRnk4cXj" type="510" changeabilityA="900" changeabilityB="900" linecolor="none" visibilityA="200" >
|
||||
<linepath>
|
||||
<startpoint startx="293" starty="171" />
|
||||
<endpoint endx="145" endy="105" />
|
||||
</linepath>
|
||||
<floatingtext usesdiagramfillcolor="1" width="35" x="147" fillcolor="none" y="107" linewidth="none" posttext="" role="710" height="19" usefillcolor="1" pretext="+" isinstance="0" xmi.id="JyCUCpRvgXXf" text="am" usesdiagramusefillcolor="1" font="Bitstream Vera Sans,8,-1,5,50,0,0,0,0,0" linecolor="none" />
|
||||
</assocwidget>
|
||||
<assocwidget totalcounta="3" indexa="2" totalcountb="2" indexb="1" linewidth="none" widgetbid="Vtec6OvZep7Y" widgetaid="v1Qyt5PysrV2" xmi.id="iNuf7uC50BLw" type="511" linecolor="none" >
|
||||
<linepath>
|
||||
<startpoint startx="395" starty="171" />
|
||||
<endpoint endx="540" endy="86" />
|
||||
</linepath>
|
||||
</assocwidget>
|
||||
</associations>
|
||||
</diagram>
|
||||
<diagram snapgrid="0" showattsig="1" fillcolor="#eeeee6" linewidth="0" zoom="100" showgrid="0" showopsig="1" usefillcolor="1" snapx="10" canvaswidth="806" snapy="10" showatts="1" xmi.id="YQA16jIjLSnq" documentation="" type="5" showops="1" showpackage="0" name="Dispatch Manager" localid="" showstereotype="0" showscope="1" snapcsgrid="0" font="Bitstream Vera Sans,8,-1,5,50,0,0,0,0,0" linecolor="#990000" canvasheight="560" >
|
||||
<widgets>
|
||||
<statewidget statetype="1" statename="HOLD" usesdiagramfillcolor="1" width="45" x="193" fillcolor="none" y="82" linewidth="none" height="25" usefillcolor="1" isinstance="0" xmi.id="cQRsSTx1r52y" documentation="" usesdiagramusefillcolor="1" font="Bitstream Vera Sans,8,-1,5,50,0,0,0,0,0" linecolor="none" >
|
||||
<Activities/>
|
||||
</statewidget>
|
||||
<statewidget statetype="1" statename="PENDING" usesdiagramfillcolor="1" width="66" x="182" fillcolor="none" y="198" linewidth="none" height="25" usefillcolor="1" isinstance="0" xmi.id="oIf7iSwtl6H7" documentation="" usesdiagramusefillcolor="1" font="Bitstream Vera Sans,8,-1,5,50,0,0,0,0,0" linecolor="none" >
|
||||
<Activities/>
|
||||
</statewidget>
|
||||
<statewidget statetype="1" statename="ACTIVE" usesdiagramfillcolor="1" width="55" x="328" fillcolor="none" y="198" linewidth="none" height="25" usefillcolor="1" isinstance="0" xmi.id="gZOXePTQh8WQ" documentation="" usesdiagramusefillcolor="1" font="Bitstream Vera Sans,8,-1,5,50,0,0,0,0,0" linecolor="none" >
|
||||
<Activities/>
|
||||
</statewidget>
|
||||
<statewidget statetype="1" statename="STOPPED" usesdiagramfillcolor="1" width="69" x="321" fillcolor="none" y="276" linewidth="none" height="25" usefillcolor="1" isinstance="0" xmi.id="YSHHYWPoyrPA" documentation="" usesdiagramusefillcolor="1" font="Bitstream Vera Sans,8,-1,5,50,0,0,0,0,0" linecolor="none" >
|
||||
<Activities/>
|
||||
</statewidget>
|
||||
<statewidget statetype="1" statename="FAILED" usesdiagramfillcolor="1" width="54" x="194" fillcolor="none" y="283" linewidth="none" height="25" usefillcolor="1" isinstance="0" xmi.id="QAuLNYi367Yk" documentation="" usesdiagramusefillcolor="1" font="Bitstream Vera Sans,8,-1,5,50,0,0,0,0,0" linecolor="none" >
|
||||
<Activities/>
|
||||
</statewidget>
|
||||
<statewidget statetype="1" statename="SUSPENDED" usesdiagramfillcolor="1" width="86" x="463" fillcolor="none" y="198" linewidth="none" height="25" usefillcolor="1" isinstance="0" xmi.id="W2BB8hZh7rwd" documentation="" usesdiagramusefillcolor="1" font="Bitstream Vera Sans,8,-1,5,50,0,0,0,0,0" linecolor="none" >
|
||||
<Activities/>
|
||||
</statewidget>
|
||||
<statewidget statetype="1" statename="DONE" usesdiagramfillcolor="1" width="46" x="332" fillcolor="none" y="94" linewidth="none" height="25" usefillcolor="1" isinstance="0" xmi.id="tyPk2vfgYjue" documentation="" usesdiagramusefillcolor="1" font="Bitstream Vera Sans,8,-1,5,50,0,0,0,0,0" linecolor="none" >
|
||||
<Activities/>
|
||||
</statewidget>
|
||||
</widgets>
|
||||
<messages/>
|
||||
<associations>
|
||||
<assocwidget totalcounta="2" indexa="1" visibilityB="200" totalcountb="3" indexb="1" linewidth="none" widgetbid="cQRsSTx1r52y" widgetaid="oIf7iSwtl6H7" roleBdoc="" documentation="" roleAdoc="" type="514" changeabilityA="900" changeabilityB="900" linecolor="none" visibilityA="200" >
|
||||
<linepath>
|
||||
<startpoint startx="215" starty="198" />
|
||||
<endpoint endx="208" endy="107" />
|
||||
</linepath>
|
||||
</assocwidget>
|
||||
<assocwidget totalcounta="2" indexa="1" visibilityB="200" totalcountb="2" indexb="1" linewidth="none" widgetbid="gZOXePTQh8WQ" widgetaid="oIf7iSwtl6H7" roleBdoc="" documentation="" roleAdoc="" type="514" changeabilityA="900" changeabilityB="900" linecolor="none" visibilityA="200" >
|
||||
<linepath>
|
||||
<startpoint startx="248" starty="210" />
|
||||
<endpoint endx="328" endy="210" />
|
||||
</linepath>
|
||||
</assocwidget>
|
||||
<assocwidget totalcounta="3" indexa="2" visibilityB="200" totalcountb="3" indexb="1" linewidth="none" widgetbid="gZOXePTQh8WQ" widgetaid="cQRsSTx1r52y" roleBdoc="" documentation="" roleAdoc="" type="514" changeabilityA="900" changeabilityB="900" linecolor="none" visibilityA="200" >
|
||||
<linepath>
|
||||
<startpoint startx="223" starty="107" />
|
||||
<endpoint endx="346" endy="198" />
|
||||
</linepath>
|
||||
</assocwidget>
|
||||
<assocwidget totalcounta="2" indexa="1" visibilityB="200" totalcountb="2" indexb="1" linewidth="none" widgetbid="YSHHYWPoyrPA" widgetaid="gZOXePTQh8WQ" roleBdoc="" documentation="" roleAdoc="" type="514" changeabilityA="900" changeabilityB="900" linecolor="none" visibilityA="200" >
|
||||
<linepath>
|
||||
<startpoint startx="355" starty="223" />
|
||||
<endpoint endx="355" endy="276" />
|
||||
</linepath>
|
||||
</assocwidget>
|
||||
<assocwidget totalcounta="2" indexa="1" visibilityB="200" totalcountb="2" indexb="1" linewidth="none" widgetbid="W2BB8hZh7rwd" widgetaid="gZOXePTQh8WQ" roleBdoc="" documentation="" roleAdoc="" type="514" changeabilityA="900" changeabilityB="900" linecolor="none" visibilityA="200" >
|
||||
<linepath>
|
||||
<startpoint startx="383" starty="210" />
|
||||
<endpoint endx="463" endy="210" />
|
||||
</linepath>
|
||||
</assocwidget>
|
||||
<assocwidget totalcounta="3" indexa="2" visibilityB="200" totalcountb="2" indexb="1" linewidth="none" widgetbid="tyPk2vfgYjue" widgetaid="gZOXePTQh8WQ" roleBdoc="" documentation="" roleAdoc="" type="514" changeabilityA="900" changeabilityB="900" linecolor="none" visibilityA="200" >
|
||||
<linepath>
|
||||
<startpoint startx="364" starty="198" />
|
||||
<endpoint endx="355" endy="119" />
|
||||
</linepath>
|
||||
</assocwidget>
|
||||
</associations>
|
||||
</diagram>
|
||||
<diagram snapgrid="1" showattsig="1" fillcolor="#d6d9e6" linewidth="1" zoom="100" showgrid="1" showopsig="1" usefillcolor="1" snapx="7" canvaswidth="1001" snapy="7" showatts="1" xmi.id="TmQ0063LG4Sn" documentation="" type="5" showops="1" showpackage="0" name="Life-cycle Manager" localid="" showstereotype="0" showscope="1" snapcsgrid="0" font="Bitstream Vera Sans,8,-1,5,50,0,0,0,0,0" linecolor="#4d515b" canvasheight="569" >
|
||||
<widgets>
|
||||
<statewidget statetype="1" statename="SHUTDOWN" usesdiagramfillcolor="0" width="167" x="819" fillcolor="#d6d9e6" y="294" linewidth="none" height="40" usefillcolor="1" isinstance="0" xmi.id="XOHvRm0fOT7w" documentation="" usesdiagramusefillcolor="0" font="Bitstream Vera Sans,8,-1,5,50,0,0,0,0,0" linecolor="#4d515b" >
|
||||
<Activities>
|
||||
<Activity name="Trigger shutdown->VMM" />
|
||||
</Activities>
|
||||
</statewidget>
|
||||
<statewidget statetype="1" statename="RUNNING" usesdiagramfillcolor="0" width="260" x="434" fillcolor="#d6d9e6" y="287" linewidth="none" height="55" usefillcolor="1" isinstance="0" xmi.id="gNq8uGMqbbs2" documentation="" usesdiagramusefillcolor="0" font="Bitstream Vera Sans,8,-1,5,50,0,0,0,0,0" linecolor="#4d515b" >
|
||||
<Activities>
|
||||
<Activity name="(CHECKPOINT) Trigger checkpoint->TM" />
|
||||
<Activity name="(MIGRATE) History[running_stime]" />
|
||||
</Activities>
|
||||
</statewidget>
|
||||
<statewidget statetype="1" statename="CHECKPOINT" usesdiagramfillcolor="0" width="174" x="567" fillcolor="#d6d9e6" y="427" linewidth="none" height="40" usefillcolor="1" isinstance="0" xmi.id="88W8ByvjKCel" documentation="" usesdiagramusefillcolor="0" font="Bitstream Vera Sans,8,-1,5,50,0,0,0,0,0" linecolor="#4d515b" >
|
||||
<Activities>
|
||||
<Activity name="Trigger checkpoint->VMM" />
|
||||
</Activities>
|
||||
</statewidget>
|
||||
<statewidget statetype="1" statename="MIGRATE" usesdiagramfillcolor="0" width="162" x="364" fillcolor="#d6d9e6" y="420" linewidth="none" height="55" usefillcolor="1" isinstance="0" xmi.id="wfPL6WFmr5uk" documentation="" usesdiagramusefillcolor="0" font="Bitstream Vera Sans,8,-1,5,50,0,0,0,0,0" linecolor="#4d515b" >
|
||||
<Activities>
|
||||
<Activity name="Trigger migrate->VMM" />
|
||||
<Activity name="History*[running_etime]" />
|
||||
</Activities>
|
||||
</statewidget>
|
||||
<statewidget statetype="1" statename="SAVE_MIGRATE" usesdiagramfillcolor="0" width="134" x="399" fillcolor="#d6d9e6" y="189" linewidth="none" height="40" usefillcolor="1" isinstance="0" xmi.id="JFYvqOvyWR4f" documentation="" usesdiagramusefillcolor="0" font="Bitstream Vera Sans,8,-1,5,50,0,0,0,0,0" linecolor="#4d515b" >
|
||||
<Activities>
|
||||
<Activity name="Trigger save->VMM" />
|
||||
</Activities>
|
||||
</statewidget>
|
||||
<statewidget statetype="1" statename="SAVE_SUSPEND" usesdiagramfillcolor="0" width="134" x="497" fillcolor="#d6d9e6" y="112" linewidth="none" height="40" usefillcolor="1" isinstance="0" xmi.id="OzOi91S4erPk" documentation="" usesdiagramusefillcolor="0" font="Bitstream Vera Sans,8,-1,5,50,0,0,0,0,0" linecolor="#4d515b" >
|
||||
<Activities>
|
||||
<Activity name="Trigger save->VMM" />
|
||||
</Activities>
|
||||
</statewidget>
|
||||
<statewidget statetype="1" statename="SAVE_STOP" usesdiagramfillcolor="0" width="134" x="595" fillcolor="#d6d9e6" y="189" linewidth="none" height="40" usefillcolor="1" isinstance="0" xmi.id="LcVAfNuzcQsQ" documentation="" usesdiagramusefillcolor="0" font="Bitstream Vera Sans,8,-1,5,50,0,0,0,0,0" linecolor="#4d515b" >
|
||||
<Activities>
|
||||
<Activity name="Trigger save->VMM" />
|
||||
</Activities>
|
||||
</statewidget>
|
||||
<statewidget statetype="1" statename="EPILOG_STOP" usesdiagramfillcolor="0" width="156" x="826" fillcolor="#d6d9e6" y="175" linewidth="none" height="70" usefillcolor="1" isinstance="0" xmi.id="onNIDRybPMHW" documentation="" usesdiagramusefillcolor="0" font="Bitstream Vera Sans,8,-1,5,50,0,0,0,0,0" linecolor="#4d515b" >
|
||||
<Activities>
|
||||
<Activity name="History[running_etime]" />
|
||||
<Activity name="History[epilog_stime]" />
|
||||
<Activity name="Trigger epilog->TM" />
|
||||
</Activities>
|
||||
</statewidget>
|
||||
<statewidget statetype="1" statename="EPILOG" usesdiagramfillcolor="0" width="156" x="826" fillcolor="#d6d9e6" y="413" linewidth="none" height="70" usefillcolor="1" isinstance="0" xmi.id="LjaxYzirZB2F" documentation="" usesdiagramusefillcolor="0" font="Bitstream Vera Sans,8,-1,5,50,0,0,0,0,0" linecolor="#4d515b" >
|
||||
<Activities>
|
||||
<Activity name="History[running_etime]" />
|
||||
<Activity name="History[epilog_stime]" />
|
||||
<Activity name="Trigger epilog->TM" />
|
||||
</Activities>
|
||||
</statewidget>
|
||||
<statewidget statetype="1" statename="PROLOG" usesdiagramfillcolor="0" width="270" x="7" fillcolor="#d6d9e6" y="175" linewidth="none" height="70" usefillcolor="1" isinstance="0" xmi.id="YuC9L4Z7pwQ2" documentation="" usesdiagramusefillcolor="0" font="Bitstream Vera Sans,8,-1,5,75,0,0,0,0,0" linecolor="#4d515b" >
|
||||
<Activities>
|
||||
<Activity name="History[prolog_stime]" />
|
||||
<Activity name="Trigger prolog->TM" />
|
||||
<Activity name="(SAVE_MIGRATE) History*[running_etime]" />
|
||||
</Activities>
|
||||
</statewidget>
|
||||
<statewidget statetype="1" statename="BOOT" usesdiagramfillcolor="0" width="155" x="63" fillcolor="#d6d9e6" y="280" linewidth="none" height="70" usefillcolor="1" isinstance="0" xmi.id="MOdjivF4cqzB" documentation="" usesdiagramusefillcolor="0" font="Bitstream Vera Sans,8,-1,5,75,0,0,0,0,0" linecolor="#4d515b" >
|
||||
<Activities>
|
||||
<Activity name="History[prolog_etime]" />
|
||||
<Activity name="History[running_stime]" />
|
||||
<Activity name="Trigger deploy->VMM" />
|
||||
</Activities>
|
||||
</statewidget>
|
||||
<floatingtext usesdiagramfillcolor="1" width="182" x="231" fillcolor="none" y="322" linewidth="none" posttext="" role="700" height="19" usefillcolor="1" pretext="" isinstance="0" xmi.id="CJBKMeDpiVSV" text="VMM->deploy(S)[Set deploy_id]" usesdiagramusefillcolor="1" font="Bitstream Vera Sans,8,-1,5,50,0,0,0,0,0" linecolor="none" />
|
||||
<floatingtext usesdiagramfillcolor="1" width="107" x="364" fillcolor="none" y="364" linewidth="none" posttext="" role="700" height="19" usefillcolor="1" pretext="" isinstance="0" xmi.id="eDKe21au3YBR" text="DM->live_migrate" usesdiagramusefillcolor="1" font="Bitstream Vera Sans,8,-1,5,50,0,0,0,0,0" linecolor="none" />
|
||||
<floatingtext usesdiagramfillcolor="1" width="74" x="644" fillcolor="none" y="364" linewidth="none" posttext="" role="700" height="19" usefillcolor="1" pretext="" isinstance="0" xmi.id="6BKNNkBzfBDl" text="LCM->timer" usesdiagramusefillcolor="1" font="Bitstream Vera Sans,8,-1,5,50,0,0,0,0,0" linecolor="none" />
|
||||
<floatingtext usesdiagramfillcolor="1" width="94" x="700" fillcolor="none" y="287" linewidth="none" posttext="" role="700" height="19" usefillcolor="1" pretext="" isinstance="0" xmi.id="HXC57ChIxGHm" text="DM->Shutdown" usesdiagramusefillcolor="1" font="Bitstream Vera Sans,8,-1,5,50,0,0,0,0,0" linecolor="none" />
|
||||
<floatingtext usesdiagramfillcolor="1" width="127" x="777" fillcolor="none" y="371" linewidth="none" posttext="" role="700" height="19" usefillcolor="1" pretext="" isinstance="0" xmi.id="rOwAlJsuHX3U" text="VMM->shutdown(S/F)" usesdiagramusefillcolor="1" font="Bitstream Vera Sans,8,-1,5,50,0,0,0,0,0" linecolor="none" />
|
||||
<floatingtext usesdiagramfillcolor="1" width="63" x="672" fillcolor="none" y="252" linewidth="none" posttext="" role="700" height="19" usefillcolor="1" pretext="" isinstance="0" xmi.id="i1EQaYj2f6mN" text="DM->stop" usesdiagramusefillcolor="1" font="Bitstream Vera Sans,8,-1,5,50,0,0,0,0,0" linecolor="none" />
|
||||
<floatingtext usesdiagramfillcolor="1" width="82" x="420" fillcolor="none" y="252" linewidth="none" posttext="" role="700" height="19" usefillcolor="1" pretext="" isinstance="0" xmi.id="vMWCDhmWu9tX" text="DM->migrate" usesdiagramusefillcolor="1" font="Bitstream Vera Sans,8,-1,5,50,0,0,0,0,0" linecolor="none" />
|
||||
<floatingtext usesdiagramfillcolor="1" width="87" x="553" fillcolor="none" y="252" linewidth="none" posttext="" role="700" height="19" usefillcolor="1" pretext="" isinstance="0" xmi.id="CB5qoelKzyv0" text="DM->suspend" usesdiagramusefillcolor="1" font="Bitstream Vera Sans,8,-1,5,50,0,0,0,0,0" linecolor="none" />
|
||||
<floatingtext usesdiagramfillcolor="1" width="89" x="735" fillcolor="none" y="182" linewidth="none" posttext="" role="700" height="19" usefillcolor="1" pretext="" isinstance="0" xmi.id="gs6yD5aSKGLH" text="VMM->save(S)" usesdiagramusefillcolor="1" font="Bitstream Vera Sans,8,-1,5,50,0,0,0,0,0" linecolor="none" />
|
||||
<floatingtext usesdiagramfillcolor="1" width="89" x="301" fillcolor="none" y="189" linewidth="none" posttext="" role="700" height="19" usefillcolor="1" pretext="" isinstance="0" xmi.id="4PZJUDAa9Ndk" text="VMM->save(S)" usesdiagramusefillcolor="1" font="Bitstream Vera Sans,8,-1,5,50,0,0,0,0,0" linecolor="none" />
|
||||
<floatingtext usesdiagramfillcolor="1" width="89" x="147" fillcolor="none" y="252" linewidth="none" posttext="" role="700" height="19" usefillcolor="1" pretext="" isinstance="0" xmi.id="6vs5prhSClqk" text="TM->prolog(S)" usesdiagramusefillcolor="1" font="Bitstream Vera Sans,8,-1,5,50,0,0,0,0,0" linecolor="none" />
|
||||
<statewidget statetype="2" statename="State" usesdiagramfillcolor="1" width="19" x="560" fillcolor="none" y="49" linewidth="none" height="19" usefillcolor="1" isinstance="0" xmi.id="ARGKD44GM0RC" documentation="" usesdiagramusefillcolor="1" font="Bitstream Vera Sans,8,-1,5,50,0,0,0,0,0" linecolor="none" >
|
||||
<Activities/>
|
||||
</statewidget>
|
||||
<floatingtext usesdiagramfillcolor="1" width="77" x="588" fillcolor="none" y="35" linewidth="none" posttext="" role="700" height="19" usefillcolor="1" pretext="" isinstance="0" xmi.id="9ty8CiwK9AfM" text="SUSPENDED" usesdiagramusefillcolor="1" font="Bitstream Vera Sans,8,-1,5,50,0,0,0,0,0" linecolor="none" />
|
||||
<floatingtext usesdiagramfillcolor="1" width="89" x="581" fillcolor="none" y="84" linewidth="none" posttext="" role="700" height="19" usefillcolor="1" pretext="" isinstance="0" xmi.id="4PZJUDAa9Ndk" text="VMM->save(S)" usesdiagramusefillcolor="1" font="Bitstream Vera Sans,8,-1,5,50,0,0,0,0,0" linecolor="none" />
|
||||
<statewidget statetype="2" statename="State" usesdiagramfillcolor="1" width="22" x="889" fillcolor="none" y="112" linewidth="none" height="22" usefillcolor="1" isinstance="0" xmi.id="83PhM2P4GDSS" documentation="" usesdiagramusefillcolor="1" font="Bitstream Vera Sans,8,-1,5,50,0,0,0,0,0" linecolor="none" >
|
||||
<Activities/>
|
||||
</statewidget>
|
||||
<floatingtext usesdiagramfillcolor="1" width="61" x="896" fillcolor="none" y="98" linewidth="none" posttext="" role="700" height="19" usefillcolor="1" pretext="" isinstance="0" xmi.id="eVtX6Ie2CPGz" text="STOPPED" usesdiagramusefillcolor="1" font="Bitstream Vera Sans,8,-1,5,50,0,0,0,0,0" linecolor="none" />
|
||||
<floatingtext usesdiagramfillcolor="1" width="87" x="910" fillcolor="none" y="147" linewidth="none" posttext="" role="700" height="19" usefillcolor="1" pretext="" isinstance="0" xmi.id="eacH2b7BcVsy" text="TM->epilog(S)" usesdiagramusefillcolor="1" font="Bitstream Vera Sans,8,-1,5,50,0,0,0,0,0" linecolor="none" />
|
||||
<statewidget statetype="2" statename="State" usesdiagramfillcolor="1" width="22" x="889" fillcolor="none" y="518" linewidth="none" height="21" usefillcolor="1" isinstance="0" xmi.id="XG1lRRE5w5c1" documentation="" usesdiagramusefillcolor="1" font="Bitstream Vera Sans,8,-1,5,50,0,0,0,0,0" linecolor="none" >
|
||||
<Activities/>
|
||||
</statewidget>
|
||||
<floatingtext usesdiagramfillcolor="1" width="87" x="805" fillcolor="none" y="490" linewidth="none" posttext="" role="700" height="19" usefillcolor="1" pretext="" isinstance="0" xmi.id="LE3VdKUIs4Xv" text="TM->epilog(S)" usesdiagramusefillcolor="1" font="Bitstream Vera Sans,8,-1,5,50,0,0,0,0,0" linecolor="none" />
|
||||
<floatingtext usesdiagramfillcolor="1" width="40" x="882" fillcolor="none" y="546" linewidth="none" posttext="" role="700" height="19" usefillcolor="1" pretext="" isinstance="0" xmi.id="fd6G8wCdCDOb" text="DONE" usesdiagramusefillcolor="1" font="Bitstream Vera Sans,8,-1,5,50,0,0,0,0,0" linecolor="none" />
|
||||
<statewidget statetype="0" statename="State" usesdiagramfillcolor="1" width="10" x="133" fillcolor="none" y="105" linewidth="none" height="10" usefillcolor="1" isinstance="0" xmi.id="v08PQqjM2BZp" documentation="" usesdiagramusefillcolor="1" font="Bitstream Vera Sans,8,-1,5,50,0,0,0,0,0" linecolor="none" >
|
||||
<Activities/>
|
||||
</statewidget>
|
||||
<floatingtext usesdiagramfillcolor="1" width="58" x="154" fillcolor="none" y="91" linewidth="none" posttext="" role="700" height="19" usefillcolor="1" pretext="" isinstance="0" xmi.id="JJLpsPtBWM5U" text="PENDING" usesdiagramusefillcolor="1" font="Bitstream Vera Sans,8,-1,5,50,0,0,0,0,0" linecolor="none" />
|
||||
</widgets>
|
||||
<messages/>
|
||||
<associations>
|
||||
<assocwidget totalcounta="2" indexa="1" visibilityB="200" totalcountb="2" indexb="1" linewidth="none" widgetbid="MOdjivF4cqzB" widgetaid="YuC9L4Z7pwQ2" roleBdoc="" documentation="" roleAdoc="" type="514" changeabilityA="900" changeabilityB="900" linecolor="none" visibilityA="200" >
|
||||
<linepath>
|
||||
<startpoint startx="140" starty="245" />
|
||||
<endpoint endx="140" endy="280" />
|
||||
</linepath>
|
||||
</assocwidget>
|
||||
<assocwidget totalcounta="2" indexa="1" visibilityB="200" totalcountb="2" indexb="1" linewidth="none" widgetbid="gNq8uGMqbbs2" widgetaid="MOdjivF4cqzB" roleBdoc="" documentation="" roleAdoc="" type="514" changeabilityA="900" changeabilityB="900" linecolor="none" visibilityA="200" >
|
||||
<linepath>
|
||||
<startpoint startx="218" starty="315" />
|
||||
<endpoint endx="434" endy="315" />
|
||||
</linepath>
|
||||
</assocwidget>
|
||||
<assocwidget totalcounta="3" indexa="2" visibilityB="200" totalcountb="2" indexb="1" linewidth="none" widgetbid="88W8ByvjKCel" widgetaid="gNq8uGMqbbs2" roleBdoc="" documentation="" roleAdoc="" type="514" changeabilityA="900" changeabilityB="900" linecolor="none" visibilityA="200" >
|
||||
<linepath>
|
||||
<startpoint startx="609" starty="342" />
|
||||
<endpoint endx="658" endy="427" />
|
||||
</linepath>
|
||||
</assocwidget>
|
||||
<assocwidget totalcounta="3" indexa="1" visibilityB="200" totalcountb="2" indexb="1" linewidth="none" widgetbid="wfPL6WFmr5uk" widgetaid="gNq8uGMqbbs2" roleBdoc="" documentation="" roleAdoc="" type="514" changeabilityA="900" changeabilityB="900" linecolor="none" visibilityA="200" >
|
||||
<linepath>
|
||||
<startpoint startx="518" starty="342" />
|
||||
<endpoint endx="448" endy="420" />
|
||||
</linepath>
|
||||
</assocwidget>
|
||||
<assocwidget totalcounta="2" indexa="1" visibilityB="200" totalcountb="2" indexb="1" linewidth="none" widgetbid="XOHvRm0fOT7w" widgetaid="gNq8uGMqbbs2" roleBdoc="" documentation="" roleAdoc="" type="514" changeabilityA="900" changeabilityB="900" linecolor="none" visibilityA="200" >
|
||||
<linepath>
|
||||
<startpoint startx="694" starty="315" />
|
||||
<endpoint endx="819" endy="315" />
|
||||
</linepath>
|
||||
</assocwidget>
|
||||
<assocwidget totalcounta="2" indexa="1" visibilityB="200" totalcountb="2" indexb="1" linewidth="none" widgetbid="LjaxYzirZB2F" widgetaid="XOHvRm0fOT7w" roleBdoc="" documentation="" roleAdoc="" type="514" changeabilityA="900" changeabilityB="900" linecolor="none" visibilityA="200" >
|
||||
<linepath>
|
||||
<startpoint startx="903" starty="334" />
|
||||
<endpoint endx="903" endy="413" />
|
||||
</linepath>
|
||||
</assocwidget>
|
||||
<assocwidget totalcounta="4" indexa="2" visibilityB="200" totalcountb="2" indexb="1" linewidth="none" widgetbid="OzOi91S4erPk" widgetaid="gNq8uGMqbbs2" roleBdoc="" documentation="" roleAdoc="" type="514" changeabilityA="900" changeabilityB="900" linecolor="none" visibilityA="200" >
|
||||
<linepath>
|
||||
<startpoint startx="567" starty="287" />
|
||||
<endpoint endx="567" endy="152" />
|
||||
</linepath>
|
||||
</assocwidget>
|
||||
<assocwidget totalcounta="4" indexa="1" visibilityB="200" totalcountb="2" indexb="1" linewidth="none" widgetbid="JFYvqOvyWR4f" widgetaid="gNq8uGMqbbs2" roleBdoc="" documentation="" roleAdoc="" type="514" changeabilityA="900" changeabilityB="900" linecolor="none" visibilityA="200" >
|
||||
<linepath>
|
||||
<startpoint startx="497" starty="287" />
|
||||
<endpoint endx="469" endy="229" />
|
||||
</linepath>
|
||||
</assocwidget>
|
||||
<assocwidget totalcounta="4" indexa="3" visibilityB="200" totalcountb="2" indexb="1" linewidth="none" widgetbid="LcVAfNuzcQsQ" widgetaid="gNq8uGMqbbs2" roleBdoc="" documentation="" roleAdoc="" type="514" changeabilityA="900" changeabilityB="900" linecolor="none" visibilityA="200" >
|
||||
<linepath>
|
||||
<startpoint startx="630" starty="287" />
|
||||
<endpoint endx="665" endy="229" />
|
||||
</linepath>
|
||||
</assocwidget>
|
||||
<assocwidget totalcounta="2" indexa="1" visibilityB="200" totalcountb="2" indexb="1" linewidth="none" widgetbid="YuC9L4Z7pwQ2" widgetaid="JFYvqOvyWR4f" roleBdoc="" documentation="" roleAdoc="" type="514" changeabilityA="900" changeabilityB="900" linecolor="none" visibilityA="200" >
|
||||
<linepath>
|
||||
<startpoint startx="399" starty="210" />
|
||||
<endpoint endx="277" endy="210" />
|
||||
</linepath>
|
||||
</assocwidget>
|
||||
<assocwidget totalcounta="2" indexa="1" visibilityB="200" totalcountb="2" indexb="1" linewidth="none" widgetbid="onNIDRybPMHW" widgetaid="LcVAfNuzcQsQ" roleBdoc="" documentation="" roleAdoc="" type="514" changeabilityA="900" changeabilityB="900" linecolor="none" visibilityA="200" >
|
||||
<linepath>
|
||||
<startpoint startx="729" starty="210" />
|
||||
<endpoint endx="826" endy="210" />
|
||||
</linepath>
|
||||
</assocwidget>
|
||||
<assocwidget totalcounta="2" indexa="1" visibilityB="200" totalcountb="2" indexb="1" linewidth="none" widgetbid="ARGKD44GM0RC" widgetaid="OzOi91S4erPk" roleBdoc="" documentation="" roleAdoc="" type="514" changeabilityA="900" changeabilityB="900" linecolor="none" visibilityA="200" >
|
||||
<linepath>
|
||||
<startpoint startx="567" starty="112" />
|
||||
<endpoint endx="567" endy="68" />
|
||||
</linepath>
|
||||
</assocwidget>
|
||||
<assocwidget totalcounta="2" indexa="1" visibilityB="200" totalcountb="2" indexb="1" linewidth="none" widgetbid="83PhM2P4GDSS" widgetaid="onNIDRybPMHW" roleBdoc="" documentation="" roleAdoc="" type="514" changeabilityA="900" changeabilityB="900" linecolor="none" visibilityA="200" >
|
||||
<linepath>
|
||||
<startpoint startx="903" starty="175" />
|
||||
<endpoint endx="903" endy="134" />
|
||||
</linepath>
|
||||
</assocwidget>
|
||||
<assocwidget totalcounta="2" indexa="1" visibilityB="200" totalcountb="2" indexb="1" linewidth="none" widgetbid="XG1lRRE5w5c1" widgetaid="LjaxYzirZB2F" roleBdoc="" documentation="" roleAdoc="" type="514" changeabilityA="900" changeabilityB="900" linecolor="none" visibilityA="200" >
|
||||
<linepath>
|
||||
<startpoint startx="903" starty="483" />
|
||||
<endpoint endx="903" endy="518" />
|
||||
</linepath>
|
||||
</assocwidget>
|
||||
<assocwidget totalcounta="2" indexa="1" visibilityB="200" totalcountb="2" indexb="1" linewidth="none" widgetbid="YuC9L4Z7pwQ2" widgetaid="v08PQqjM2BZp" roleBdoc="" documentation="" roleAdoc="" type="514" changeabilityA="900" changeabilityB="900" linecolor="none" visibilityA="200" >
|
||||
<linepath>
|
||||
<startpoint startx="140" starty="115" />
|
||||
<endpoint endx="140" endy="175" />
|
||||
</linepath>
|
||||
</assocwidget>
|
||||
</associations>
|
||||
</diagram>
|
||||
</diagrams>
|
||||
</XMI.extension>
|
||||
</UML:Model>
|
||||
<UML:Model stereotype="folder" isSpecification="false" isLeaf="false" visibility="public" namespace="m1" xmi.id="Use Case View" isRoot="false" isAbstract="false" name="Use Case View" >
|
||||
<UML:Namespace.ownedElement/>
|
||||
</UML:Model>
|
||||
<UML:Model stereotype="folder" isSpecification="false" isLeaf="false" visibility="public" namespace="m1" xmi.id="Component View" isRoot="false" isAbstract="false" name="Component View" >
|
||||
<UML:Namespace.ownedElement/>
|
||||
</UML:Model>
|
||||
<UML:Model stereotype="folder" isSpecification="false" isLeaf="false" visibility="public" namespace="m1" xmi.id="Deployment View" isRoot="false" isAbstract="false" name="Deployment View" >
|
||||
<UML:Namespace.ownedElement/>
|
||||
</UML:Model>
|
||||
<UML:Model stereotype="folder" isSpecification="false" isLeaf="false" visibility="public" namespace="m1" xmi.id="Entity Relationship Model" isRoot="false" isAbstract="false" name="Entity Relationship Model" >
|
||||
<UML:Namespace.ownedElement/>
|
||||
</UML:Model>
|
||||
</UML:Namespace.ownedElement>
|
||||
</UML:Model>
|
||||
</XMI.content>
|
||||
<XMI.extensions xmi.extender="umbrello" >
|
||||
<docsettings viewid="TmQ0063LG4Sn" documentation="" uniqueid="JJLpsPtBWM5U" />
|
||||
<listview>
|
||||
<listitem open="1" type="800" label="Views" >
|
||||
<listitem open="1" type="801" id="Logical View" >
|
||||
<listitem open="0" type="807" id="tJJXQ7qLTGJd" label="Action" />
|
||||
<listitem open="0" type="807" id="DpoC0D4VUaxG" label="VMpool" />
|
||||
<listitem open="0" type="808" id="YQA16jIjLSnq" label="Dispatch Manager" />
|
||||
<listitem open="0" type="808" id="TmQ0063LG4Sn" label="Life-cycle Manager" />
|
||||
<listitem open="0" type="813" id="lSGAN6DHQApL" >
|
||||
<listitem open="0" type="814" id="PnRpA2YxeF9Y" />
|
||||
<listitem open="0" type="814" id="THHIdjRDCzRQ" />
|
||||
<listitem open="0" type="815" id="qFxhNZSAMMR4" />
|
||||
<listitem open="0" type="815" id="MKeaF4nJSUdl" />
|
||||
<listitem open="0" type="815" id="STOhI1BX7rpi" />
|
||||
</listitem>
|
||||
<listitem open="0" type="813" id="v1Qyt5PysrV2" >
|
||||
<listitem open="0" type="814" id="y1DwtRnk4cXj" />
|
||||
<listitem open="0" type="815" id="Wbx0pbNT3TB4" />
|
||||
</listitem>
|
||||
<listitem open="0" type="813" id="z7Dg2MlvQ7CM" >
|
||||
<listitem open="0" type="814" id="QcFMJ056hrSv" />
|
||||
<listitem open="0" type="814" id="x7VATmBXqsOJ" />
|
||||
</listitem>
|
||||
<listitem open="0" type="813" id="FTcjgY1ruC0v" >
|
||||
<listitem open="0" type="814" id="1oS3xv31KiB4" />
|
||||
<listitem open="0" type="814" id="ixTgs2fhSgcN" />
|
||||
<listitem open="0" type="815" id="nbM2o3ajdhrk" />
|
||||
<listitem open="0" type="815" id="cYMrUig7UHTW" />
|
||||
<listitem open="0" type="815" id="IDwc2QJgWnvx" />
|
||||
<listitem open="0" type="815" id="M1RmI6G51EM0" />
|
||||
</listitem>
|
||||
<listitem open="0" type="813" id="QzClxwWHdfMc" >
|
||||
<listitem open="0" type="814" id="ufg9C6NNEIhF" />
|
||||
<listitem open="0" type="814" id="FZr0VlUmM86y" />
|
||||
<listitem open="0" type="814" id="ItJ2xkSJdUgP" />
|
||||
<listitem open="0" type="815" id="nTmQ2dvvUMVn" />
|
||||
<listitem open="0" type="815" id="vcv2H4PsHW1N" />
|
||||
<listitem open="0" type="815" id="tZBwi4Zb7qdU" />
|
||||
<listitem open="0" type="815" id="4HEQcydWqn6n" />
|
||||
</listitem>
|
||||
<listitem open="0" type="813" id="HyJpS3PRU1Kj" >
|
||||
<listitem open="0" type="814" id="Q6C0ik7hGMJ2" />
|
||||
</listitem>
|
||||
<listitem open="0" type="813" id="7a8pQxuHOv3I" >
|
||||
<listitem open="0" type="814" id="I1swDie713Rd" />
|
||||
<listitem open="0" type="814" id="qJQVdL68irlQ" />
|
||||
<listitem open="0" type="814" id="c5qYO6nEljFF" />
|
||||
<listitem open="0" type="814" id="C2CvmPBZYxhn" />
|
||||
<listitem open="0" type="814" id="1MY8bxtpD5th" />
|
||||
<listitem open="0" type="815" id="3hebSdUOoDAF" />
|
||||
<listitem open="0" type="815" id="4ICQgXHT7GOe" />
|
||||
</listitem>
|
||||
<listitem open="1" type="813" id="KCAGyFqIpgL0" />
|
||||
<listitem open="1" type="813" id="qTRhqpQ0PE3f" />
|
||||
<listitem open="1" type="813" id="ypAsly1Z2KtR" />
|
||||
<listitem open="1" type="813" id="m0Kw7a2RrIht" />
|
||||
<listitem open="0" type="817" id="Vtec6OvZep7Y" >
|
||||
<listitem open="0" type="815" id="r5wKwYx2uqZZ" />
|
||||
</listitem>
|
||||
<listitem open="0" type="830" id="Datatypes" >
|
||||
<listitem open="1" type="829" id="XMIKc2o5J6Nu" />
|
||||
<listitem open="1" type="829" id="XNuw315mXeUm" />
|
||||
<listitem open="1" type="829" id="BKzfuxuVlEmK" />
|
||||
<listitem open="1" type="829" id="oRTstiC5X0HW" />
|
||||
<listitem open="1" type="829" id="Nu2tsIN4aMhU" />
|
||||
<listitem open="1" type="829" id="41ex5eEr4fjx" />
|
||||
<listitem open="1" type="829" id="bqKIZpHLv42H" />
|
||||
<listitem open="1" type="829" id="c2eghLb5Fcw6" />
|
||||
<listitem open="0" type="829" id="WUJUz2wkP4qL" />
|
||||
<listitem open="1" type="829" id="mxryNx8LdqSJ" />
|
||||
<listitem open="1" type="829" id="Hby3oiLsjxpm" />
|
||||
<listitem open="0" type="829" id="FRk6rIA1W1VM" />
|
||||
<listitem open="1" type="829" id="EnOdbIq8WtLj" />
|
||||
<listitem open="0" type="829" id="vy53e946a47C" />
|
||||
<listitem open="1" type="829" id="sJASdpuvRqwF" />
|
||||
<listitem open="1" type="829" id="x2fBcbHSsPuV" />
|
||||
<listitem open="1" type="829" id="WF5DDs0nucRc" />
|
||||
</listitem>
|
||||
<listitem open="0" type="831" id="XnOFdBKmjtR7" >
|
||||
<listitem open="0" type="839" id="ZrmvfBSRZf4i" />
|
||||
<listitem open="0" type="839" id="Pk8VgQdGINBv" />
|
||||
<listitem open="0" type="839" id="j0GohzR4iZYO" />
|
||||
</listitem>
|
||||
</listitem>
|
||||
<listitem open="1" type="802" id="Use Case View" />
|
||||
<listitem open="1" type="821" id="Component View" />
|
||||
<listitem open="1" type="827" id="Deployment View" />
|
||||
<listitem open="1" type="836" id="Entity Relationship Model" />
|
||||
</listitem>
|
||||
</listview>
|
||||
<codegeneration>
|
||||
<codegenerator language="C++" />
|
||||
</codegeneration>
|
||||
</XMI.extensions>
|
||||
</XMI>
|
740
share/doc/design/requestmanager.xmi
Normal file
740
share/doc/design/requestmanager.xmi
Normal file
@ -0,0 +1,740 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<XMI xmlns:UML="http://schema.omg.org/spec/UML/1.3" verified="false" timestamp="2008-01-27T00:25:38" xmi.version="1.2" >
|
||||
<XMI.header>
|
||||
<XMI.documentation>
|
||||
<XMI.exporter>umbrello uml modeller http://uml.sf.net</XMI.exporter>
|
||||
<XMI.exporterVersion>1.5.8</XMI.exporterVersion>
|
||||
<XMI.exporterEncoding>UnicodeUTF8</XMI.exporterEncoding>
|
||||
</XMI.documentation>
|
||||
<XMI.metamodel xmi.name="UML" href="UML.xml" xmi.version="1.3" />
|
||||
</XMI.header>
|
||||
<XMI.content>
|
||||
<UML:Model isSpecification="false" isLeaf="false" isRoot="false" xmi.id="m1" isAbstract="false" name="UML Model" >
|
||||
<UML:Namespace.ownedElement>
|
||||
<UML:Stereotype isSpecification="false" isLeaf="false" visibility="public" namespace="m1" xmi.id="folder" isRoot="false" isAbstract="false" name="folder" />
|
||||
<UML:Stereotype isSpecification="false" isLeaf="false" visibility="public" namespace="m1" xmi.id="datatype" isRoot="false" isAbstract="false" name="datatype" />
|
||||
<UML:Stereotype isSpecification="false" isLeaf="false" visibility="public" namespace="m1" xmi.id="interface" isRoot="false" isAbstract="false" name="interface" />
|
||||
<UML:Stereotype isSpecification="false" isLeaf="false" visibility="public" namespace="m1" xmi.id="ActionListener" isRoot="false" isAbstract="false" name="ActionListener" />
|
||||
<UML:Stereotype isSpecification="false" isLeaf="false" visibility="public" namespace="m1" xmi.id="enum" isRoot="false" isAbstract="false" name="enum" />
|
||||
<UML:Stereotype isSpecification="false" isLeaf="false" visibility="public" namespace="m1" xmi.id="typedef" isRoot="false" isAbstract="false" name="typedef" />
|
||||
<UML:Model stereotype="folder" isSpecification="false" isLeaf="false" visibility="public" namespace="m1" xmi.id="Logical View" isRoot="false" isAbstract="false" name="Logical View" >
|
||||
<UML:Namespace.ownedElement>
|
||||
<UML:Package stereotype="folder" isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="Datatypes" isRoot="false" isAbstract="false" name="Datatypes" >
|
||||
<UML:Namespace.ownedElement>
|
||||
<UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="OzkL9ELTDV2a" isRoot="false" isAbstract="false" name="int" />
|
||||
<UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="GKGmCBizDn1b" isRoot="false" isAbstract="false" name="char" />
|
||||
<UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="KwxEP7Cn7u8G" isRoot="false" isAbstract="false" name="bool" />
|
||||
<UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="7RhIxhsDz8zB" isRoot="false" isAbstract="false" name="float" />
|
||||
<UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="Ig9VRA4m4zyT" isRoot="false" isAbstract="false" name="double" />
|
||||
<UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="7AGE3NSAo7Sl" isRoot="false" isAbstract="false" name="short" />
|
||||
<UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="mLwlRuxha4Az" isRoot="false" isAbstract="false" name="long" />
|
||||
<UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="CDjGAhkHqyTt" isRoot="false" isAbstract="false" name="unsigned int" />
|
||||
<UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="Lt3A0VtmoqWE" isRoot="false" isAbstract="false" name="unsigned short" />
|
||||
<UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="kTvIX4FhHzxR" isRoot="false" isAbstract="false" name="unsigned long" />
|
||||
<UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="gfhWe8Nx2Q50" isRoot="false" isAbstract="false" name="string" />
|
||||
<UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="8uOJiEoJIWlZ" isRoot="false" isAbstract="false" name="xmlrpc_c::value* const" elementReference="Bhqn7O4dxRLU" />
|
||||
<UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="PYy0daZfZgLk" isRoot="false" isAbstract="false" name="xmlrpc_c::paramList const&" elementReference="Bhqn7O4dxRLU" />
|
||||
<UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="m37A5WkcCLCs" isRoot="false" isAbstract="false" name="xmlrpc_c::method* const" elementReference="ABhr9zLggIYR" />
|
||||
<UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="RqSbCcTtZRId" isRoot="false" isAbstract="false" name="xmlrpc_c::method*" elementReference="ABhr9zLggIYR" />
|
||||
<UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="N39BeTbjRUoX" isRoot="false" isAbstract="false" name="std::string const&" elementReference="Bhqn7O4dxRLU" />
|
||||
<UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="t44p7k8gEWBe" isRoot="false" isAbstract="false" name="xmlrpc_c::defaultMethod* const" elementReference="Bhqn7O4dxRLU" />
|
||||
<UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="IWTX3d9958g6" isRoot="false" isAbstract="false" name="xmlrpc_c::defaultMethod*" elementReference="Bhqn7O4dxRLU" />
|
||||
<UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="R42BV1zRDazt" isRoot="false" isAbstract="false" name="std::string* const" elementReference="gfhWe8Nx2Q50" />
|
||||
<UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="HUmSL95BsE5N" isRoot="false" isAbstract="false" name="xmlrpc_registry*" elementReference="Bhqn7O4dxRLU" />
|
||||
<UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="FCjdx8dQApja" isRoot="false" isAbstract="false" name="std::list< xmlrpc_c :: methodPtr >" elementReference="Bhqn7O4dxRLU" />
|
||||
<UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="FznJh4xRuoHi" isRoot="false" isAbstract="false" name="xmlrpc_c::registry* const" elementReference="Bhqn7O4dxRLU" />
|
||||
<UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="KjHCVYuP989S" isRoot="false" isAbstract="false" name="xmlrpc_c::registry*" elementReference="Bhqn7O4dxRLU" />
|
||||
<UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="IObxMYpj7Dml" isRoot="false" isAbstract="false" name="xmlrpc_c::value const&" elementReference="Bhqn7O4dxRLU" />
|
||||
<UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="6FilU9Nsf7nu" isRoot="false" isAbstract="false" name="xmlrpc_c::value&" elementReference="Bhqn7O4dxRLU" />
|
||||
<UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="d2JI76BIQgcy" isRoot="false" isAbstract="false" name="xmlrpc_value* const" elementReference="Bhqn7O4dxRLU" />
|
||||
<UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="qUW8N97wj9eu" isRoot="false" isAbstract="false" name="xmlrpc_value*" elementReference="Bhqn7O4dxRLU" />
|
||||
<UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="moqwOtwyeNyb" isRoot="false" isAbstract="false" name="struct timeval const&" elementReference="Bhqn7O4dxRLU" />
|
||||
<UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="dIcQVo6Mtx6m" isRoot="false" isAbstract="false" name="struct timespec const&" elementReference="Bhqn7O4dxRLU" />
|
||||
<UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="OO1obhIymcoD" isRoot="false" isAbstract="false" name="std::vector< unsigned char > const&" elementReference="Bhqn7O4dxRLU" />
|
||||
<UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="omJJ8BODLS05" isRoot="false" isAbstract="false" name="std::vector< unsigned char >" elementReference="Bhqn7O4dxRLU" />
|
||||
<UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="vs9aeZKVqvbr" isRoot="false" isAbstract="false" name="std::map< std :: string, xmlrpc_c :: value > const&" elementReference="Bhqn7O4dxRLU" />
|
||||
<UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="hMqEiSn6H7Jh" isRoot="false" isAbstract="false" name="std::vector< xmlrpc_c :: value > const&" elementReference="Bhqn7O4dxRLU" />
|
||||
<UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="dHJzFzh130gV" isRoot="false" isAbstract="false" name="std::vector< xmlrpc_c :: value >" elementReference="Bhqn7O4dxRLU" />
|
||||
<UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="2ifvlTtK9OtT" isRoot="false" isAbstract="false" name="std::map< std :: string, xmlrpc_c :: value >" elementReference="Bhqn7O4dxRLU" />
|
||||
<UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="HwY7TNWM8fWv" isRoot="false" isAbstract="false" name="xmlrpc_c::registryPtr const&" elementReference="Bhqn7O4dxRLU" />
|
||||
<UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="WPOhoYL5TrAu" isRoot="false" isAbstract="false" name="constrOpt&" elementReference="Bhqn7O4dxRLU" />
|
||||
<UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="wLpNDzHPeTkz" isRoot="false" isAbstract="false" name="const xmlrpc_c::registry* const&" elementReference="Bhqn7O4dxRLU" />
|
||||
<UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="jXC197XkGQxv" isRoot="false" isAbstract="false" name="xmlrpc_socket const&" elementReference="Bhqn7O4dxRLU" />
|
||||
<UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="6E5W7867gNNe" isRoot="false" isAbstract="false" name="uint const&" elementReference="Bhqn7O4dxRLU" />
|
||||
<UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="lKqf5qfggNDJ" isRoot="false" isAbstract="false" name="bool const&" elementReference="Bhqn7O4dxRLU" />
|
||||
<UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="FZaWvz4Y3a8w" isRoot="false" isAbstract="false" name="const xmlrpc_c::registry*" elementReference="Bhqn7O4dxRLU" />
|
||||
<UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="ujRn7KhgOaI5" isRoot="false" isAbstract="false" name="(server_abyss_0)" />
|
||||
<UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="6x5vSHnAP3tD" isRoot="false" isAbstract="false" name="constrOpt const&" elementReference="Bhqn7O4dxRLU" />
|
||||
<UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="6yyeXysFdTiE" isRoot="false" isAbstract="false" name="xmlrpc_c::registry const&" elementReference="Bhqn7O4dxRLU" />
|
||||
<UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="Bhqn7O4dxRLU" isRoot="false" isAbstract="false" name="undef" >
|
||||
<UML:GeneralizableElement.generalization>
|
||||
<UML:Generalization xmi.idref="QLMQ1eynixe1" />
|
||||
<UML:Generalization xmi.idref="bvQ8LjlG6A84" />
|
||||
<UML:Generalization xmi.idref="ZAlNOYo6wyDn" />
|
||||
<UML:Generalization xmi.idref="8wqGUHRdplrW" />
|
||||
<UML:Generalization xmi.idref="7Hd4c3bD7xGV" />
|
||||
<UML:Generalization xmi.idref="3ThApQ4omxHV" />
|
||||
<UML:Generalization xmi.idref="Sz0mQMnICqg9" />
|
||||
<UML:Generalization xmi.idref="WghYZaovYLUU" />
|
||||
<UML:Generalization xmi.idref="8eqGa72ba7ck" />
|
||||
<UML:Generalization xmi.idref="6aQgK51ACHZV" />
|
||||
<UML:Generalization xmi.idref="vOAo6ARoVM28" />
|
||||
<UML:Generalization xmi.idref="IP1lCdf4OjbV" />
|
||||
<UML:Generalization xmi.idref="G3Cp44urGjlp" />
|
||||
<UML:Generalization xmi.idref="nkOItXo8Vvkk" />
|
||||
</UML:GeneralizableElement.generalization>
|
||||
</UML:DataType>
|
||||
<UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="h4aNsLSHP5Er" isRoot="false" isAbstract="false" name="new_datatype" />
|
||||
<UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="uPJgv1a40kxT" isRoot="false" isAbstract="false" name="vector<HostInformation>" elementReference="D2oeLcpAZ2wU" />
|
||||
</UML:Namespace.ownedElement>
|
||||
</UML:Package>
|
||||
<UML:Generalization isSpecification="false" child="ABhr9zLggIYR" visibility="public" namespace="Logical View" xmi.id="t6aAezr80Pi6" parent="Bhqn7O4dxRLU" discriminator="" name="" />
|
||||
<UML:Package isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="qneGDX083w3i" isRoot="false" isAbstract="false" name="std" >
|
||||
<UML:Namespace.ownedElement>
|
||||
<UML:Dependency isSpecification="false" visibility="public" namespace="Logical View" xmi.id="FVuUhQHzq2w3" client="Bhqn7O4dxRLU" name="" supplier="qneGDX083w3i" />
|
||||
<UML:Dependency isSpecification="false" visibility="public" namespace="Logical View" xmi.id="b4WZ44T4oFKr" client="Bhqn7O4dxRLU" name="" supplier="qneGDX083w3i" />
|
||||
<UML:Dependency isSpecification="false" visibility="public" namespace="qneGDX083w3i" xmi.id="FVuUhQHzq2w3" client="Bhqn7O4dxRLU" name="" supplier="qneGDX083w3i" />
|
||||
<UML:Dependency isSpecification="false" visibility="public" namespace="qneGDX083w3i" xmi.id="b4WZ44T4oFKr" client="Bhqn7O4dxRLU" name="" supplier="qneGDX083w3i" />
|
||||
<UML:Dependency isSpecification="false" visibility="public" namespace="qneGDX083w3i" xmi.id="FVuUhQHzq2w3" client="Bhqn7O4dxRLU" name="" supplier="qneGDX083w3i" />
|
||||
<UML:Dependency isSpecification="false" visibility="public" namespace="qneGDX083w3i" xmi.id="b4WZ44T4oFKr" client="Bhqn7O4dxRLU" name="" supplier="qneGDX083w3i" />
|
||||
<UML:Dependency isSpecification="false" visibility="public" namespace="qneGDX083w3i" xmi.id="FVuUhQHzq2w3" client="Bhqn7O4dxRLU" name="" supplier="qneGDX083w3i" />
|
||||
<UML:Dependency isSpecification="false" visibility="public" namespace="qneGDX083w3i" xmi.id="b4WZ44T4oFKr" client="Bhqn7O4dxRLU" name="" supplier="qneGDX083w3i" />
|
||||
<UML:Dependency isSpecification="false" visibility="public" namespace="qneGDX083w3i" xmi.id="FVuUhQHzq2w3" client="Bhqn7O4dxRLU" name="" supplier="qneGDX083w3i" />
|
||||
<UML:Dependency isSpecification="false" visibility="public" namespace="qneGDX083w3i" xmi.id="b4WZ44T4oFKr" client="Bhqn7O4dxRLU" name="" supplier="qneGDX083w3i" />
|
||||
<UML:Dependency isSpecification="false" visibility="public" namespace="qneGDX083w3i" xmi.id="FVuUhQHzq2w3" client="Bhqn7O4dxRLU" name="" supplier="qneGDX083w3i" />
|
||||
<UML:Dependency isSpecification="false" visibility="public" namespace="qneGDX083w3i" xmi.id="b4WZ44T4oFKr" client="Bhqn7O4dxRLU" name="" supplier="qneGDX083w3i" />
|
||||
<UML:Dependency isSpecification="false" visibility="public" namespace="qneGDX083w3i" xmi.id="FVuUhQHzq2w3" client="Bhqn7O4dxRLU" name="" supplier="qneGDX083w3i" />
|
||||
<UML:Dependency isSpecification="false" visibility="public" namespace="qneGDX083w3i" xmi.id="b4WZ44T4oFKr" client="Bhqn7O4dxRLU" name="" supplier="qneGDX083w3i" />
|
||||
<UML:Dependency isSpecification="false" visibility="public" namespace="qneGDX083w3i" xmi.id="FVuUhQHzq2w3" client="Bhqn7O4dxRLU" name="" supplier="qneGDX083w3i" />
|
||||
<UML:Dependency isSpecification="false" visibility="public" namespace="qneGDX083w3i" xmi.id="b4WZ44T4oFKr" client="Bhqn7O4dxRLU" name="" supplier="qneGDX083w3i" />
|
||||
<UML:Dependency isSpecification="false" visibility="public" namespace="qneGDX083w3i" xmi.id="FVuUhQHzq2w3" client="Bhqn7O4dxRLU" name="" supplier="qneGDX083w3i" />
|
||||
<UML:Dependency isSpecification="false" visibility="public" namespace="qneGDX083w3i" xmi.id="b4WZ44T4oFKr" client="Bhqn7O4dxRLU" name="" supplier="qneGDX083w3i" />
|
||||
<UML:Dependency isSpecification="false" visibility="public" namespace="qneGDX083w3i" xmi.id="FVuUhQHzq2w3" client="Bhqn7O4dxRLU" name="" supplier="qneGDX083w3i" />
|
||||
<UML:Dependency isSpecification="false" visibility="public" namespace="qneGDX083w3i" xmi.id="b4WZ44T4oFKr" client="Bhqn7O4dxRLU" name="" supplier="qneGDX083w3i" />
|
||||
<UML:Dependency isSpecification="false" visibility="public" namespace="qneGDX083w3i" xmi.id="FVuUhQHzq2w3" client="Bhqn7O4dxRLU" name="" supplier="qneGDX083w3i" />
|
||||
<UML:Dependency isSpecification="false" visibility="public" namespace="qneGDX083w3i" xmi.id="b4WZ44T4oFKr" client="Bhqn7O4dxRLU" name="" supplier="qneGDX083w3i" />
|
||||
<UML:Dependency isSpecification="false" visibility="public" namespace="qneGDX083w3i" xmi.id="FVuUhQHzq2w3" client="Bhqn7O4dxRLU" name="" supplier="qneGDX083w3i" />
|
||||
<UML:Dependency isSpecification="false" visibility="public" namespace="qneGDX083w3i" xmi.id="b4WZ44T4oFKr" client="Bhqn7O4dxRLU" name="" supplier="qneGDX083w3i" />
|
||||
<UML:Dependency isSpecification="false" visibility="public" namespace="qneGDX083w3i" xmi.id="FVuUhQHzq2w3" client="Bhqn7O4dxRLU" name="" supplier="qneGDX083w3i" />
|
||||
<UML:Dependency isSpecification="false" visibility="public" namespace="qneGDX083w3i" xmi.id="b4WZ44T4oFKr" client="Bhqn7O4dxRLU" name="" supplier="qneGDX083w3i" />
|
||||
<UML:Dependency isSpecification="false" visibility="public" namespace="qneGDX083w3i" xmi.id="FVuUhQHzq2w3" client="Bhqn7O4dxRLU" name="" supplier="qneGDX083w3i" />
|
||||
<UML:Dependency isSpecification="false" visibility="public" namespace="qneGDX083w3i" xmi.id="b4WZ44T4oFKr" client="Bhqn7O4dxRLU" name="" supplier="qneGDX083w3i" />
|
||||
<UML:Dependency isSpecification="false" visibility="public" namespace="qneGDX083w3i" xmi.id="FVuUhQHzq2w3" client="Bhqn7O4dxRLU" name="" supplier="qneGDX083w3i" />
|
||||
<UML:Dependency isSpecification="false" visibility="public" namespace="qneGDX083w3i" xmi.id="b4WZ44T4oFKr" client="Bhqn7O4dxRLU" name="" supplier="qneGDX083w3i" />
|
||||
<UML:Dependency isSpecification="false" visibility="public" namespace="Logical View" xmi.id="FVuUhQHzq2w3" client="Bhqn7O4dxRLU" name="" supplier="qneGDX083w3i" />
|
||||
<UML:Dependency isSpecification="false" visibility="public" namespace="Logical View" xmi.id="b4WZ44T4oFKr" client="Bhqn7O4dxRLU" name="" supplier="qneGDX083w3i" />
|
||||
</UML:Namespace.ownedElement>
|
||||
</UML:Package>
|
||||
<UML:Generalization isSpecification="false" child="Bhqn7O4dxRLU" visibility="public" namespace="Logical View" xmi.id="QLMQ1eynixe1" parent="Bhqn7O4dxRLU" discriminator="" name="" />
|
||||
<UML:Generalization isSpecification="false" child="Bhqn7O4dxRLU" visibility="public" namespace="Logical View" xmi.id="bvQ8LjlG6A84" parent="Bhqn7O4dxRLU" discriminator="" name="" />
|
||||
<UML:Generalization isSpecification="false" child="Bhqn7O4dxRLU" visibility="public" namespace="Logical View" xmi.id="ZAlNOYo6wyDn" parent="Bhqn7O4dxRLU" discriminator="" name="" />
|
||||
<UML:Generalization isSpecification="false" child="Bhqn7O4dxRLU" visibility="public" namespace="Logical View" xmi.id="8wqGUHRdplrW" parent="Bhqn7O4dxRLU" discriminator="" name="" />
|
||||
<UML:Dependency isSpecification="false" visibility="public" namespace="Logical View" xmi.id="8FFvVM1uVJ9s" client="Bhqn7O4dxRLU" name="" supplier="A0oHpJFBuM08" />
|
||||
<UML:Generalization isSpecification="false" child="Bhqn7O4dxRLU" visibility="public" namespace="Logical View" xmi.id="7Hd4c3bD7xGV" parent="Bhqn7O4dxRLU" discriminator="" name="" />
|
||||
<UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="nUQ9f913QOMM" isRoot="false" isAbstract="false" name="URIHandler" elementReference="Bhqn7O4dxRLU" />
|
||||
<UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="Yjj4VCmK2mbw" isRoot="false" isAbstract="false" name="xmlrpc_method" elementReference="Bhqn7O4dxRLU" />
|
||||
<UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="EMRvUrR9qL3O" isRoot="false" isAbstract="false" name="xmlrpc_default_method" elementReference="Bhqn7O4dxRLU" />
|
||||
<UML:Generalization isSpecification="false" child="Bhqn7O4dxRLU" visibility="public" namespace="Logical View" xmi.id="3ThApQ4omxHV" parent="Bhqn7O4dxRLU" discriminator="" name="" />
|
||||
<UML:Generalization isSpecification="false" child="Bhqn7O4dxRLU" visibility="public" namespace="Logical View" xmi.id="Sz0mQMnICqg9" parent="Bhqn7O4dxRLU" discriminator="" name="" />
|
||||
<UML:Generalization isSpecification="false" child="Bhqn7O4dxRLU" visibility="public" namespace="Logical View" xmi.id="WghYZaovYLUU" parent="Bhqn7O4dxRLU" discriminator="" name="" />
|
||||
<UML:Generalization isSpecification="false" child="Bhqn7O4dxRLU" visibility="public" namespace="Logical View" xmi.id="8eqGa72ba7ck" parent="Bhqn7O4dxRLU" discriminator="" name="" />
|
||||
<UML:Generalization isSpecification="false" child="Bhqn7O4dxRLU" visibility="public" namespace="Logical View" xmi.id="6aQgK51ACHZV" parent="Bhqn7O4dxRLU" discriminator="" name="" />
|
||||
<UML:Generalization isSpecification="false" child="Bhqn7O4dxRLU" visibility="public" namespace="Logical View" xmi.id="vOAo6ARoVM28" parent="Bhqn7O4dxRLU" discriminator="" name="" />
|
||||
<UML:Generalization isSpecification="false" child="Bhqn7O4dxRLU" visibility="public" namespace="Logical View" xmi.id="IP1lCdf4OjbV" parent="Bhqn7O4dxRLU" discriminator="" name="" />
|
||||
<UML:Generalization isSpecification="false" child="Bhqn7O4dxRLU" visibility="public" namespace="Logical View" xmi.id="G3Cp44urGjlp" parent="Bhqn7O4dxRLU" discriminator="" name="" />
|
||||
<UML:Dependency isSpecification="false" visibility="public" namespace="Logical View" xmi.id="FVuUhQHzq2w3" client="Bhqn7O4dxRLU" name="" supplier="qneGDX083w3i" />
|
||||
<UML:Dependency isSpecification="false" visibility="public" namespace="Logical View" xmi.id="YvsMxoP5oKP2" client="Bhqn7O4dxRLU" name="" supplier="A0oHpJFBuM08" />
|
||||
<UML:Dependency isSpecification="false" visibility="public" namespace="Logical View" xmi.id="ksdWD1YgIj9a" client="Bhqn7O4dxRLU" name="" supplier="Bhqn7O4dxRLU" />
|
||||
<UML:Generalization isSpecification="false" child="Bhqn7O4dxRLU" visibility="public" namespace="Logical View" xmi.id="nkOItXo8Vvkk" parent="Bhqn7O4dxRLU" discriminator="" name="" />
|
||||
<UML:Dependency isSpecification="false" visibility="public" namespace="Logical View" xmi.id="x9xXLSw2iVEu" client="Bhqn7O4dxRLU" name="" supplier="A0oHpJFBuM08" />
|
||||
<UML:Dependency isSpecification="false" visibility="public" namespace="Logical View" xmi.id="F81xbGpOPBeL" client="Bhqn7O4dxRLU" name="" supplier="Bhqn7O4dxRLU" />
|
||||
<UML:Dependency isSpecification="false" visibility="public" namespace="Logical View" xmi.id="nsZsxfTX4ptl" client="Bhqn7O4dxRLU" name="" supplier="A0oHpJFBuM08" />
|
||||
<UML:Dependency isSpecification="false" visibility="public" namespace="Logical View" xmi.id="8sqDhjwQOLVu" client="Bhqn7O4dxRLU" name="" supplier="Bhqn7O4dxRLU" />
|
||||
<UML:Dependency isSpecification="false" visibility="public" namespace="Logical View" xmi.id="gg8w0n6IPaAK" client="Bhqn7O4dxRLU" name="" supplier="A0oHpJFBuM08" />
|
||||
<UML:Dependency isSpecification="false" visibility="public" namespace="Logical View" xmi.id="yH3LrBfMhbo3" client="Bhqn7O4dxRLU" name="" supplier="Bhqn7O4dxRLU" />
|
||||
<UML:Dependency isSpecification="false" visibility="public" namespace="Logical View" xmi.id="b4WZ44T4oFKr" client="Bhqn7O4dxRLU" name="" supplier="qneGDX083w3i" />
|
||||
<UML:Dependency isSpecification="false" visibility="public" namespace="Logical View" xmi.id="jEcYTwNgYen1" client="Bhqn7O4dxRLU" name="" supplier="A0oHpJFBuM08" />
|
||||
<UML:Dependency isSpecification="false" visibility="public" namespace="Logical View" xmi.id="x1xWfiV8xw9G" client="Bhqn7O4dxRLU" name="" supplier="Bhqn7O4dxRLU" />
|
||||
<UML:Dependency isSpecification="false" visibility="public" namespace="Logical View" xmi.id="QhvsTFNgDZl0" client="Bhqn7O4dxRLU" name="" supplier="A0oHpJFBuM08" />
|
||||
<UML:Dependency isSpecification="false" visibility="public" namespace="Logical View" xmi.id="UGHgq2g71sxH" client="Bhqn7O4dxRLU" name="" supplier="Bhqn7O4dxRLU" />
|
||||
<UML:Package isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="A0oHpJFBuM08" isRoot="false" isAbstract="false" name="xmlrpc_c" >
|
||||
<UML:Namespace.ownedElement>
|
||||
<UML:Class isSpecification="false" isLeaf="false" visibility="public" namespace="A0oHpJFBuM08" xmi.id="ABhr9zLggIYR" isRoot="false" isAbstract="false" name="xmlrpc_c::method" >
|
||||
<UML:GeneralizableElement.generalization>
|
||||
<UML:Generalization xmi.idref="t6aAezr80Pi6" />
|
||||
</UML:GeneralizableElement.generalization>
|
||||
<UML:Classifier.feature>
|
||||
<UML:Operation isSpecification="false" isLeaf="false" visibility="public" xmi.id="9puD8vuOpmf4" isRoot="false" isAbstract="true" isQuery="false" name="execute" >
|
||||
<UML:BehavioralFeature.parameter>
|
||||
<UML:Parameter isSpecification="false" visibility="private" xmi.id="KxRAErgXRSvk" value="" type="PYy0daZfZgLk" name="paramList" />
|
||||
<UML:Parameter isSpecification="false" visibility="private" xmi.id="xYyvh2uopnzx" value="" type="8uOJiEoJIWlZ" name="resultP" />
|
||||
</UML:BehavioralFeature.parameter>
|
||||
</UML:Operation>
|
||||
<UML:Operation isSpecification="false" isLeaf="false" visibility="public" xmi.id="wYvrZ0vQlZgw" isRoot="false" isAbstract="false" isQuery="false" name="help" >
|
||||
<UML:BehavioralFeature.parameter>
|
||||
<UML:Parameter kind="return" xmi.id="4e57Y8nS6HEp" type="gfhWe8Nx2Q50" />
|
||||
</UML:BehavioralFeature.parameter>
|
||||
</UML:Operation>
|
||||
</UML:Classifier.feature>
|
||||
</UML:Class>
|
||||
<UML:Dependency isSpecification="false" visibility="public" namespace="A0oHpJFBuM08" xmi.id="8FFvVM1uVJ9s" client="Bhqn7O4dxRLU" name="" supplier="A0oHpJFBuM08" />
|
||||
<UML:Dependency isSpecification="false" visibility="public" namespace="A0oHpJFBuM08" xmi.id="YvsMxoP5oKP2" client="Bhqn7O4dxRLU" name="" supplier="A0oHpJFBuM08" />
|
||||
<UML:Dependency isSpecification="false" visibility="public" namespace="A0oHpJFBuM08" xmi.id="x9xXLSw2iVEu" client="Bhqn7O4dxRLU" name="" supplier="A0oHpJFBuM08" />
|
||||
<UML:Dependency isSpecification="false" visibility="public" namespace="A0oHpJFBuM08" xmi.id="nsZsxfTX4ptl" client="Bhqn7O4dxRLU" name="" supplier="A0oHpJFBuM08" />
|
||||
<UML:Dependency isSpecification="false" visibility="public" namespace="A0oHpJFBuM08" xmi.id="gg8w0n6IPaAK" client="Bhqn7O4dxRLU" name="" supplier="A0oHpJFBuM08" />
|
||||
<UML:Dependency isSpecification="false" visibility="public" namespace="A0oHpJFBuM08" xmi.id="jEcYTwNgYen1" client="Bhqn7O4dxRLU" name="" supplier="A0oHpJFBuM08" />
|
||||
<UML:Dependency isSpecification="false" visibility="public" namespace="A0oHpJFBuM08" xmi.id="QhvsTFNgDZl0" client="Bhqn7O4dxRLU" name="" supplier="A0oHpJFBuM08" />
|
||||
<UML:Dependency isSpecification="false" visibility="public" namespace="A0oHpJFBuM08" xmi.id="8FFvVM1uVJ9s" client="Bhqn7O4dxRLU" name="" supplier="A0oHpJFBuM08" />
|
||||
<UML:Dependency isSpecification="false" visibility="public" namespace="A0oHpJFBuM08" xmi.id="YvsMxoP5oKP2" client="Bhqn7O4dxRLU" name="" supplier="A0oHpJFBuM08" />
|
||||
<UML:Dependency isSpecification="false" visibility="public" namespace="A0oHpJFBuM08" xmi.id="x9xXLSw2iVEu" client="Bhqn7O4dxRLU" name="" supplier="A0oHpJFBuM08" />
|
||||
<UML:Dependency isSpecification="false" visibility="public" namespace="A0oHpJFBuM08" xmi.id="nsZsxfTX4ptl" client="Bhqn7O4dxRLU" name="" supplier="A0oHpJFBuM08" />
|
||||
<UML:Dependency isSpecification="false" visibility="public" namespace="A0oHpJFBuM08" xmi.id="gg8w0n6IPaAK" client="Bhqn7O4dxRLU" name="" supplier="A0oHpJFBuM08" />
|
||||
<UML:Dependency isSpecification="false" visibility="public" namespace="A0oHpJFBuM08" xmi.id="jEcYTwNgYen1" client="Bhqn7O4dxRLU" name="" supplier="A0oHpJFBuM08" />
|
||||
<UML:Dependency isSpecification="false" visibility="public" namespace="A0oHpJFBuM08" xmi.id="QhvsTFNgDZl0" client="Bhqn7O4dxRLU" name="" supplier="A0oHpJFBuM08" />
|
||||
<UML:Dependency isSpecification="false" visibility="public" namespace="A0oHpJFBuM08" xmi.id="8FFvVM1uVJ9s" client="Bhqn7O4dxRLU" name="" supplier="A0oHpJFBuM08" />
|
||||
<UML:Dependency isSpecification="false" visibility="public" namespace="A0oHpJFBuM08" xmi.id="YvsMxoP5oKP2" client="Bhqn7O4dxRLU" name="" supplier="A0oHpJFBuM08" />
|
||||
<UML:Dependency isSpecification="false" visibility="public" namespace="A0oHpJFBuM08" xmi.id="x9xXLSw2iVEu" client="Bhqn7O4dxRLU" name="" supplier="A0oHpJFBuM08" />
|
||||
<UML:Dependency isSpecification="false" visibility="public" namespace="A0oHpJFBuM08" xmi.id="nsZsxfTX4ptl" client="Bhqn7O4dxRLU" name="" supplier="A0oHpJFBuM08" />
|
||||
<UML:Dependency isSpecification="false" visibility="public" namespace="A0oHpJFBuM08" xmi.id="gg8w0n6IPaAK" client="Bhqn7O4dxRLU" name="" supplier="A0oHpJFBuM08" />
|
||||
<UML:Dependency isSpecification="false" visibility="public" namespace="A0oHpJFBuM08" xmi.id="jEcYTwNgYen1" client="Bhqn7O4dxRLU" name="" supplier="A0oHpJFBuM08" />
|
||||
<UML:Dependency isSpecification="false" visibility="public" namespace="A0oHpJFBuM08" xmi.id="QhvsTFNgDZl0" client="Bhqn7O4dxRLU" name="" supplier="A0oHpJFBuM08" />
|
||||
<UML:Dependency isSpecification="false" visibility="public" namespace="A0oHpJFBuM08" xmi.id="8FFvVM1uVJ9s" client="Bhqn7O4dxRLU" name="" supplier="A0oHpJFBuM08" />
|
||||
<UML:Dependency isSpecification="false" visibility="public" namespace="A0oHpJFBuM08" xmi.id="YvsMxoP5oKP2" client="Bhqn7O4dxRLU" name="" supplier="A0oHpJFBuM08" />
|
||||
<UML:Dependency isSpecification="false" visibility="public" namespace="A0oHpJFBuM08" xmi.id="x9xXLSw2iVEu" client="Bhqn7O4dxRLU" name="" supplier="A0oHpJFBuM08" />
|
||||
<UML:Dependency isSpecification="false" visibility="public" namespace="A0oHpJFBuM08" xmi.id="nsZsxfTX4ptl" client="Bhqn7O4dxRLU" name="" supplier="A0oHpJFBuM08" />
|
||||
<UML:Dependency isSpecification="false" visibility="public" namespace="A0oHpJFBuM08" xmi.id="gg8w0n6IPaAK" client="Bhqn7O4dxRLU" name="" supplier="A0oHpJFBuM08" />
|
||||
<UML:Dependency isSpecification="false" visibility="public" namespace="A0oHpJFBuM08" xmi.id="jEcYTwNgYen1" client="Bhqn7O4dxRLU" name="" supplier="A0oHpJFBuM08" />
|
||||
<UML:Dependency isSpecification="false" visibility="public" namespace="A0oHpJFBuM08" xmi.id="QhvsTFNgDZl0" client="Bhqn7O4dxRLU" name="" supplier="A0oHpJFBuM08" />
|
||||
<UML:Dependency isSpecification="false" visibility="public" namespace="A0oHpJFBuM08" xmi.id="8FFvVM1uVJ9s" client="Bhqn7O4dxRLU" name="" supplier="A0oHpJFBuM08" />
|
||||
<UML:Dependency isSpecification="false" visibility="public" namespace="A0oHpJFBuM08" xmi.id="YvsMxoP5oKP2" client="Bhqn7O4dxRLU" name="" supplier="A0oHpJFBuM08" />
|
||||
<UML:Dependency isSpecification="false" visibility="public" namespace="A0oHpJFBuM08" xmi.id="x9xXLSw2iVEu" client="Bhqn7O4dxRLU" name="" supplier="A0oHpJFBuM08" />
|
||||
<UML:Dependency isSpecification="false" visibility="public" namespace="A0oHpJFBuM08" xmi.id="nsZsxfTX4ptl" client="Bhqn7O4dxRLU" name="" supplier="A0oHpJFBuM08" />
|
||||
<UML:Dependency isSpecification="false" visibility="public" namespace="A0oHpJFBuM08" xmi.id="gg8w0n6IPaAK" client="Bhqn7O4dxRLU" name="" supplier="A0oHpJFBuM08" />
|
||||
<UML:Dependency isSpecification="false" visibility="public" namespace="A0oHpJFBuM08" xmi.id="jEcYTwNgYen1" client="Bhqn7O4dxRLU" name="" supplier="A0oHpJFBuM08" />
|
||||
<UML:Dependency isSpecification="false" visibility="public" namespace="A0oHpJFBuM08" xmi.id="QhvsTFNgDZl0" client="Bhqn7O4dxRLU" name="" supplier="A0oHpJFBuM08" />
|
||||
<UML:Dependency isSpecification="false" visibility="public" namespace="A0oHpJFBuM08" xmi.id="8FFvVM1uVJ9s" client="Bhqn7O4dxRLU" name="" supplier="A0oHpJFBuM08" />
|
||||
<UML:Dependency isSpecification="false" visibility="public" namespace="A0oHpJFBuM08" xmi.id="YvsMxoP5oKP2" client="Bhqn7O4dxRLU" name="" supplier="A0oHpJFBuM08" />
|
||||
<UML:Dependency isSpecification="false" visibility="public" namespace="A0oHpJFBuM08" xmi.id="x9xXLSw2iVEu" client="Bhqn7O4dxRLU" name="" supplier="A0oHpJFBuM08" />
|
||||
<UML:Dependency isSpecification="false" visibility="public" namespace="A0oHpJFBuM08" xmi.id="nsZsxfTX4ptl" client="Bhqn7O4dxRLU" name="" supplier="A0oHpJFBuM08" />
|
||||
<UML:Dependency isSpecification="false" visibility="public" namespace="A0oHpJFBuM08" xmi.id="gg8w0n6IPaAK" client="Bhqn7O4dxRLU" name="" supplier="A0oHpJFBuM08" />
|
||||
<UML:Dependency isSpecification="false" visibility="public" namespace="A0oHpJFBuM08" xmi.id="jEcYTwNgYen1" client="Bhqn7O4dxRLU" name="" supplier="A0oHpJFBuM08" />
|
||||
<UML:Dependency isSpecification="false" visibility="public" namespace="A0oHpJFBuM08" xmi.id="QhvsTFNgDZl0" client="Bhqn7O4dxRLU" name="" supplier="A0oHpJFBuM08" />
|
||||
<UML:Dependency isSpecification="false" visibility="public" namespace="A0oHpJFBuM08" xmi.id="8FFvVM1uVJ9s" client="Bhqn7O4dxRLU" name="" supplier="A0oHpJFBuM08" />
|
||||
<UML:Dependency isSpecification="false" visibility="public" namespace="A0oHpJFBuM08" xmi.id="YvsMxoP5oKP2" client="Bhqn7O4dxRLU" name="" supplier="A0oHpJFBuM08" />
|
||||
<UML:Dependency isSpecification="false" visibility="public" namespace="A0oHpJFBuM08" xmi.id="x9xXLSw2iVEu" client="Bhqn7O4dxRLU" name="" supplier="A0oHpJFBuM08" />
|
||||
<UML:Dependency isSpecification="false" visibility="public" namespace="A0oHpJFBuM08" xmi.id="nsZsxfTX4ptl" client="Bhqn7O4dxRLU" name="" supplier="A0oHpJFBuM08" />
|
||||
<UML:Dependency isSpecification="false" visibility="public" namespace="A0oHpJFBuM08" xmi.id="gg8w0n6IPaAK" client="Bhqn7O4dxRLU" name="" supplier="A0oHpJFBuM08" />
|
||||
<UML:Dependency isSpecification="false" visibility="public" namespace="A0oHpJFBuM08" xmi.id="jEcYTwNgYen1" client="Bhqn7O4dxRLU" name="" supplier="A0oHpJFBuM08" />
|
||||
<UML:Dependency isSpecification="false" visibility="public" namespace="A0oHpJFBuM08" xmi.id="QhvsTFNgDZl0" client="Bhqn7O4dxRLU" name="" supplier="A0oHpJFBuM08" />
|
||||
<UML:Dependency isSpecification="false" visibility="public" namespace="A0oHpJFBuM08" xmi.id="8FFvVM1uVJ9s" client="Bhqn7O4dxRLU" name="" supplier="A0oHpJFBuM08" />
|
||||
<UML:Dependency isSpecification="false" visibility="public" namespace="A0oHpJFBuM08" xmi.id="YvsMxoP5oKP2" client="Bhqn7O4dxRLU" name="" supplier="A0oHpJFBuM08" />
|
||||
<UML:Dependency isSpecification="false" visibility="public" namespace="A0oHpJFBuM08" xmi.id="x9xXLSw2iVEu" client="Bhqn7O4dxRLU" name="" supplier="A0oHpJFBuM08" />
|
||||
<UML:Dependency isSpecification="false" visibility="public" namespace="A0oHpJFBuM08" xmi.id="nsZsxfTX4ptl" client="Bhqn7O4dxRLU" name="" supplier="A0oHpJFBuM08" />
|
||||
<UML:Dependency isSpecification="false" visibility="public" namespace="A0oHpJFBuM08" xmi.id="gg8w0n6IPaAK" client="Bhqn7O4dxRLU" name="" supplier="A0oHpJFBuM08" />
|
||||
<UML:Dependency isSpecification="false" visibility="public" namespace="A0oHpJFBuM08" xmi.id="jEcYTwNgYen1" client="Bhqn7O4dxRLU" name="" supplier="A0oHpJFBuM08" />
|
||||
<UML:Dependency isSpecification="false" visibility="public" namespace="A0oHpJFBuM08" xmi.id="QhvsTFNgDZl0" client="Bhqn7O4dxRLU" name="" supplier="A0oHpJFBuM08" />
|
||||
<UML:Dependency isSpecification="false" visibility="public" namespace="A0oHpJFBuM08" xmi.id="8FFvVM1uVJ9s" client="Bhqn7O4dxRLU" name="" supplier="A0oHpJFBuM08" />
|
||||
<UML:Dependency isSpecification="false" visibility="public" namespace="A0oHpJFBuM08" xmi.id="YvsMxoP5oKP2" client="Bhqn7O4dxRLU" name="" supplier="A0oHpJFBuM08" />
|
||||
<UML:Dependency isSpecification="false" visibility="public" namespace="A0oHpJFBuM08" xmi.id="x9xXLSw2iVEu" client="Bhqn7O4dxRLU" name="" supplier="A0oHpJFBuM08" />
|
||||
<UML:Dependency isSpecification="false" visibility="public" namespace="A0oHpJFBuM08" xmi.id="nsZsxfTX4ptl" client="Bhqn7O4dxRLU" name="" supplier="A0oHpJFBuM08" />
|
||||
<UML:Dependency isSpecification="false" visibility="public" namespace="A0oHpJFBuM08" xmi.id="gg8w0n6IPaAK" client="Bhqn7O4dxRLU" name="" supplier="A0oHpJFBuM08" />
|
||||
<UML:Dependency isSpecification="false" visibility="public" namespace="A0oHpJFBuM08" xmi.id="jEcYTwNgYen1" client="Bhqn7O4dxRLU" name="" supplier="A0oHpJFBuM08" />
|
||||
<UML:Dependency isSpecification="false" visibility="public" namespace="A0oHpJFBuM08" xmi.id="QhvsTFNgDZl0" client="Bhqn7O4dxRLU" name="" supplier="A0oHpJFBuM08" />
|
||||
<UML:Dependency isSpecification="false" visibility="public" namespace="A0oHpJFBuM08" xmi.id="8FFvVM1uVJ9s" client="Bhqn7O4dxRLU" name="" supplier="A0oHpJFBuM08" />
|
||||
<UML:Dependency isSpecification="false" visibility="public" namespace="A0oHpJFBuM08" xmi.id="YvsMxoP5oKP2" client="Bhqn7O4dxRLU" name="" supplier="A0oHpJFBuM08" />
|
||||
<UML:Dependency isSpecification="false" visibility="public" namespace="A0oHpJFBuM08" xmi.id="x9xXLSw2iVEu" client="Bhqn7O4dxRLU" name="" supplier="A0oHpJFBuM08" />
|
||||
<UML:Dependency isSpecification="false" visibility="public" namespace="A0oHpJFBuM08" xmi.id="nsZsxfTX4ptl" client="Bhqn7O4dxRLU" name="" supplier="A0oHpJFBuM08" />
|
||||
<UML:Dependency isSpecification="false" visibility="public" namespace="A0oHpJFBuM08" xmi.id="gg8w0n6IPaAK" client="Bhqn7O4dxRLU" name="" supplier="A0oHpJFBuM08" />
|
||||
<UML:Dependency isSpecification="false" visibility="public" namespace="A0oHpJFBuM08" xmi.id="jEcYTwNgYen1" client="Bhqn7O4dxRLU" name="" supplier="A0oHpJFBuM08" />
|
||||
<UML:Dependency isSpecification="false" visibility="public" namespace="A0oHpJFBuM08" xmi.id="QhvsTFNgDZl0" client="Bhqn7O4dxRLU" name="" supplier="A0oHpJFBuM08" />
|
||||
<UML:Dependency isSpecification="false" visibility="public" namespace="A0oHpJFBuM08" xmi.id="8FFvVM1uVJ9s" client="Bhqn7O4dxRLU" name="" supplier="A0oHpJFBuM08" />
|
||||
<UML:Dependency isSpecification="false" visibility="public" namespace="A0oHpJFBuM08" xmi.id="YvsMxoP5oKP2" client="Bhqn7O4dxRLU" name="" supplier="A0oHpJFBuM08" />
|
||||
<UML:Dependency isSpecification="false" visibility="public" namespace="A0oHpJFBuM08" xmi.id="x9xXLSw2iVEu" client="Bhqn7O4dxRLU" name="" supplier="A0oHpJFBuM08" />
|
||||
<UML:Dependency isSpecification="false" visibility="public" namespace="A0oHpJFBuM08" xmi.id="nsZsxfTX4ptl" client="Bhqn7O4dxRLU" name="" supplier="A0oHpJFBuM08" />
|
||||
<UML:Dependency isSpecification="false" visibility="public" namespace="A0oHpJFBuM08" xmi.id="gg8w0n6IPaAK" client="Bhqn7O4dxRLU" name="" supplier="A0oHpJFBuM08" />
|
||||
<UML:Dependency isSpecification="false" visibility="public" namespace="A0oHpJFBuM08" xmi.id="jEcYTwNgYen1" client="Bhqn7O4dxRLU" name="" supplier="A0oHpJFBuM08" />
|
||||
<UML:Dependency isSpecification="false" visibility="public" namespace="A0oHpJFBuM08" xmi.id="QhvsTFNgDZl0" client="Bhqn7O4dxRLU" name="" supplier="A0oHpJFBuM08" />
|
||||
<UML:Dependency isSpecification="false" visibility="public" namespace="A0oHpJFBuM08" xmi.id="8FFvVM1uVJ9s" client="Bhqn7O4dxRLU" name="" supplier="A0oHpJFBuM08" />
|
||||
<UML:Dependency isSpecification="false" visibility="public" namespace="A0oHpJFBuM08" xmi.id="YvsMxoP5oKP2" client="Bhqn7O4dxRLU" name="" supplier="A0oHpJFBuM08" />
|
||||
<UML:Dependency isSpecification="false" visibility="public" namespace="A0oHpJFBuM08" xmi.id="x9xXLSw2iVEu" client="Bhqn7O4dxRLU" name="" supplier="A0oHpJFBuM08" />
|
||||
<UML:Dependency isSpecification="false" visibility="public" namespace="A0oHpJFBuM08" xmi.id="nsZsxfTX4ptl" client="Bhqn7O4dxRLU" name="" supplier="A0oHpJFBuM08" />
|
||||
<UML:Dependency isSpecification="false" visibility="public" namespace="A0oHpJFBuM08" xmi.id="gg8w0n6IPaAK" client="Bhqn7O4dxRLU" name="" supplier="A0oHpJFBuM08" />
|
||||
<UML:Dependency isSpecification="false" visibility="public" namespace="A0oHpJFBuM08" xmi.id="jEcYTwNgYen1" client="Bhqn7O4dxRLU" name="" supplier="A0oHpJFBuM08" />
|
||||
<UML:Dependency isSpecification="false" visibility="public" namespace="A0oHpJFBuM08" xmi.id="QhvsTFNgDZl0" client="Bhqn7O4dxRLU" name="" supplier="A0oHpJFBuM08" />
|
||||
<UML:Dependency isSpecification="false" visibility="public" namespace="A0oHpJFBuM08" xmi.id="8FFvVM1uVJ9s" client="Bhqn7O4dxRLU" name="" supplier="A0oHpJFBuM08" />
|
||||
<UML:Dependency isSpecification="false" visibility="public" namespace="A0oHpJFBuM08" xmi.id="YvsMxoP5oKP2" client="Bhqn7O4dxRLU" name="" supplier="A0oHpJFBuM08" />
|
||||
<UML:Dependency isSpecification="false" visibility="public" namespace="A0oHpJFBuM08" xmi.id="x9xXLSw2iVEu" client="Bhqn7O4dxRLU" name="" supplier="A0oHpJFBuM08" />
|
||||
<UML:Dependency isSpecification="false" visibility="public" namespace="A0oHpJFBuM08" xmi.id="nsZsxfTX4ptl" client="Bhqn7O4dxRLU" name="" supplier="A0oHpJFBuM08" />
|
||||
<UML:Dependency isSpecification="false" visibility="public" namespace="A0oHpJFBuM08" xmi.id="gg8w0n6IPaAK" client="Bhqn7O4dxRLU" name="" supplier="A0oHpJFBuM08" />
|
||||
<UML:Dependency isSpecification="false" visibility="public" namespace="A0oHpJFBuM08" xmi.id="jEcYTwNgYen1" client="Bhqn7O4dxRLU" name="" supplier="A0oHpJFBuM08" />
|
||||
<UML:Dependency isSpecification="false" visibility="public" namespace="A0oHpJFBuM08" xmi.id="QhvsTFNgDZl0" client="Bhqn7O4dxRLU" name="" supplier="A0oHpJFBuM08" />
|
||||
<UML:Dependency isSpecification="false" visibility="public" namespace="A0oHpJFBuM08" xmi.id="8FFvVM1uVJ9s" client="Bhqn7O4dxRLU" name="" supplier="A0oHpJFBuM08" />
|
||||
<UML:Dependency isSpecification="false" visibility="public" namespace="A0oHpJFBuM08" xmi.id="YvsMxoP5oKP2" client="Bhqn7O4dxRLU" name="" supplier="A0oHpJFBuM08" />
|
||||
<UML:Dependency isSpecification="false" visibility="public" namespace="A0oHpJFBuM08" xmi.id="x9xXLSw2iVEu" client="Bhqn7O4dxRLU" name="" supplier="A0oHpJFBuM08" />
|
||||
<UML:Dependency isSpecification="false" visibility="public" namespace="A0oHpJFBuM08" xmi.id="nsZsxfTX4ptl" client="Bhqn7O4dxRLU" name="" supplier="A0oHpJFBuM08" />
|
||||
<UML:Dependency isSpecification="false" visibility="public" namespace="A0oHpJFBuM08" xmi.id="gg8w0n6IPaAK" client="Bhqn7O4dxRLU" name="" supplier="A0oHpJFBuM08" />
|
||||
<UML:Dependency isSpecification="false" visibility="public" namespace="A0oHpJFBuM08" xmi.id="jEcYTwNgYen1" client="Bhqn7O4dxRLU" name="" supplier="A0oHpJFBuM08" />
|
||||
<UML:Dependency isSpecification="false" visibility="public" namespace="A0oHpJFBuM08" xmi.id="QhvsTFNgDZl0" client="Bhqn7O4dxRLU" name="" supplier="A0oHpJFBuM08" />
|
||||
<UML:Dependency isSpecification="false" visibility="public" namespace="A0oHpJFBuM08" xmi.id="8FFvVM1uVJ9s" client="Bhqn7O4dxRLU" name="" supplier="A0oHpJFBuM08" />
|
||||
<UML:Dependency isSpecification="false" visibility="public" namespace="A0oHpJFBuM08" xmi.id="YvsMxoP5oKP2" client="Bhqn7O4dxRLU" name="" supplier="A0oHpJFBuM08" />
|
||||
<UML:Dependency isSpecification="false" visibility="public" namespace="A0oHpJFBuM08" xmi.id="x9xXLSw2iVEu" client="Bhqn7O4dxRLU" name="" supplier="A0oHpJFBuM08" />
|
||||
<UML:Dependency isSpecification="false" visibility="public" namespace="A0oHpJFBuM08" xmi.id="nsZsxfTX4ptl" client="Bhqn7O4dxRLU" name="" supplier="A0oHpJFBuM08" />
|
||||
<UML:Dependency isSpecification="false" visibility="public" namespace="A0oHpJFBuM08" xmi.id="gg8w0n6IPaAK" client="Bhqn7O4dxRLU" name="" supplier="A0oHpJFBuM08" />
|
||||
<UML:Dependency isSpecification="false" visibility="public" namespace="A0oHpJFBuM08" xmi.id="jEcYTwNgYen1" client="Bhqn7O4dxRLU" name="" supplier="A0oHpJFBuM08" />
|
||||
<UML:Dependency isSpecification="false" visibility="public" namespace="A0oHpJFBuM08" xmi.id="QhvsTFNgDZl0" client="Bhqn7O4dxRLU" name="" supplier="A0oHpJFBuM08" />
|
||||
<UML:Dependency isSpecification="false" visibility="public" namespace="Logical View" xmi.id="8FFvVM1uVJ9s" client="Bhqn7O4dxRLU" name="" supplier="A0oHpJFBuM08" />
|
||||
<UML:Dependency isSpecification="false" visibility="public" namespace="Logical View" xmi.id="YvsMxoP5oKP2" client="Bhqn7O4dxRLU" name="" supplier="A0oHpJFBuM08" />
|
||||
<UML:Dependency isSpecification="false" visibility="public" namespace="Logical View" xmi.id="x9xXLSw2iVEu" client="Bhqn7O4dxRLU" name="" supplier="A0oHpJFBuM08" />
|
||||
<UML:Dependency isSpecification="false" visibility="public" namespace="Logical View" xmi.id="nsZsxfTX4ptl" client="Bhqn7O4dxRLU" name="" supplier="A0oHpJFBuM08" />
|
||||
<UML:Dependency isSpecification="false" visibility="public" namespace="Logical View" xmi.id="gg8w0n6IPaAK" client="Bhqn7O4dxRLU" name="" supplier="A0oHpJFBuM08" />
|
||||
<UML:Dependency isSpecification="false" visibility="public" namespace="Logical View" xmi.id="jEcYTwNgYen1" client="Bhqn7O4dxRLU" name="" supplier="A0oHpJFBuM08" />
|
||||
<UML:Dependency isSpecification="false" visibility="public" namespace="Logical View" xmi.id="QhvsTFNgDZl0" client="Bhqn7O4dxRLU" name="" supplier="A0oHpJFBuM08" />
|
||||
</UML:Namespace.ownedElement>
|
||||
</UML:Package>
|
||||
<UML:Class isSpecification="false" isLeaf="false" visibility="protected" namespace="Logical View" xmi.id="NKn4CmR9J9wA" isRoot="false" isAbstract="false" name="RequestManagerMethod" >
|
||||
<UML:GeneralizableElement.generalization>
|
||||
<UML:Generalization xmi.idref="6Q1lx2l3BccB" />
|
||||
</UML:GeneralizableElement.generalization>
|
||||
<UML:Classifier.feature>
|
||||
<UML:Operation isSpecification="false" isLeaf="false" visibility="public" xmi.id="UxNBZAWWHlyW" isRoot="false" isAbstract="false" isQuery="false" name="execute" >
|
||||
<UML:BehavioralFeature.parameter>
|
||||
<UML:Parameter isSpecification="false" visibility="private" xmi.id="qwBU8VzyDMTc" value="" type="PYy0daZfZgLk" name="paramList" />
|
||||
<UML:Parameter isSpecification="false" visibility="private" xmi.id="sHidtuaLrvWO" value="" type="8uOJiEoJIWlZ" name="retvalP" />
|
||||
</UML:BehavioralFeature.parameter>
|
||||
</UML:Operation>
|
||||
<UML:Operation isSpecification="false" isLeaf="false" visibility="public" xmi.id="J5stk8UazE5N" isRoot="false" isAbstract="true" isQuery="false" name="rm_operation" />
|
||||
<UML:Operation isSpecification="false" isLeaf="false" visibility="private" xmi.id="3qvFtHzZhaK8" isRoot="false" isAbstract="false" isQuery="false" name="authorize" />
|
||||
</UML:Classifier.feature>
|
||||
</UML:Class>
|
||||
<UML:Dependency isSpecification="false" visibility="public" namespace="Logical View" xmi.id="M0TcIYHH3gCp" client="ABhr9zLggIYR" name="" supplier="NKn4CmR9J9wA" />
|
||||
<UML:Class isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="SzXQhVokEGyj" isRoot="false" isAbstract="false" name="nebula::ActionListener" >
|
||||
<UML:Classifier.feature>
|
||||
<UML:Operation isSpecification="false" isLeaf="false" visibility="public" xmi.id="WGYjuvRmUCLt" isRoot="false" isAbstract="false" isQuery="false" name="do_action" >
|
||||
<UML:BehavioralFeature.parameter>
|
||||
<UML:Parameter isSpecification="false" visibility="private" xmi.id="HCmUsJ9uy3Hg" value="" type="gfhWe8Nx2Q50" name="actionName" />
|
||||
<UML:Parameter isSpecification="false" visibility="private" xmi.id="XRu1eFstPeNH" value="" type="Bhqn7O4dxRLU" name="actionArgs" />
|
||||
</UML:BehavioralFeature.parameter>
|
||||
</UML:Operation>
|
||||
</UML:Classifier.feature>
|
||||
</UML:Class>
|
||||
<UML:Class isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="cIdSJPHjOn95" isRoot="false" isAbstract="false" name="KillMethod" >
|
||||
<UML:GeneralizableElement.generalization>
|
||||
<UML:Generalization xmi.idref="wL2zuMgsJ3aW" />
|
||||
</UML:GeneralizableElement.generalization>
|
||||
<UML:Classifier.feature>
|
||||
<UML:Operation isSpecification="false" isLeaf="false" visibility="public" xmi.id="eIxbkWipq2Q4" isRoot="false" isAbstract="false" isQuery="false" name="rm_operation" />
|
||||
</UML:Classifier.feature>
|
||||
</UML:Class>
|
||||
<UML:Class isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="IxoXBkEH2iNc" isRoot="false" isAbstract="false" name="SubmitMethod" >
|
||||
<UML:GeneralizableElement.generalization>
|
||||
<UML:Generalization xmi.idref="YbRhB1qp4ZKh" />
|
||||
<UML:Generalization xmi.idref="STpHQNlBd14y" />
|
||||
<UML:Generalization xmi.idref="tXImS2dZ0dSm" />
|
||||
</UML:GeneralizableElement.generalization>
|
||||
<UML:Classifier.feature>
|
||||
<UML:Operation isSpecification="false" isLeaf="false" visibility="public" xmi.id="vdgviGsHoHwS" isRoot="false" isAbstract="false" isQuery="false" name="rm_operation" />
|
||||
</UML:Classifier.feature>
|
||||
</UML:Class>
|
||||
<UML:Dependency isSpecification="false" visibility="public" namespace="Logical View" xmi.id="BISaYBxLI0bG" client="NKn4CmR9J9wA" name="" supplier="SzXQhVokEGyj" />
|
||||
<UML:Generalization isSpecification="false" child="NKn4CmR9J9wA" visibility="public" namespace="Logical View" xmi.id="6Q1lx2l3BccB" parent="ABhr9zLggIYR" discriminator="" name="" />
|
||||
<UML:Generalization isSpecification="false" child="IxoXBkEH2iNc" visibility="public" namespace="Logical View" xmi.id="YbRhB1qp4ZKh" parent="NKn4CmR9J9wA" discriminator="" name="" />
|
||||
<UML:Generalization isSpecification="false" child="cIdSJPHjOn95" visibility="public" namespace="Logical View" xmi.id="wL2zuMgsJ3aW" parent="NKn4CmR9J9wA" discriminator="" name="" />
|
||||
<UML:Class isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="9OVTeRewhW26" isRoot="false" isAbstract="false" name="RequestManagerSession" >
|
||||
<UML:GeneralizableElement.generalization>
|
||||
<UML:Generalization xmi.idref="GPEJepvManc6" />
|
||||
</UML:GeneralizableElement.generalization>
|
||||
<UML:Classifier.feature>
|
||||
<UML:Attribute isSpecification="false" visibility="private" xmi.id="IOxkc5pFT5Tl" type="OzkL9ELTDV2a" name="session_id" />
|
||||
<UML:Attribute isSpecification="false" visibility="private" xmi.id="y1MXmwdXeqM6" type="rwcHWayOoQOM" name="am" />
|
||||
</UML:Classifier.feature>
|
||||
</UML:Class>
|
||||
<UML:Class isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="Kfk2iZm22Bqb" isRoot="false" isAbstract="false" name="SessionRequest" >
|
||||
<UML:GeneralizableElement.generalization>
|
||||
<UML:Generalization xmi.idref="7hy9TcS6ScdS" />
|
||||
</UML:GeneralizableElement.generalization>
|
||||
<UML:Classifier.feature>
|
||||
<UML:Attribute isSpecification="false" visibility="private" xmi.id="YxSt1fUJvfKc" type="KwxEP7Cn7u8G" name="request_done" />
|
||||
<UML:Attribute isSpecification="false" visibility="private" xmi.id="A5fOIFI1018W" type="OzkL9ELTDV2a" name="session_id" />
|
||||
</UML:Classifier.feature>
|
||||
</UML:Class>
|
||||
<UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="PyatuGF3ckUE" name="" >
|
||||
<UML:Association.connection>
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="eYqpbx7OzyPi" aggregation="composite" type="9OVTeRewhW26" name="" />
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="tHz2Pi1WxLpq" aggregation="none" type="Kfk2iZm22Bqb" name="" multiplicity="1..*" />
|
||||
</UML:Association.connection>
|
||||
</UML:Association>
|
||||
<UML:Class isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="hmNeyEt6jRoK" isRoot="false" isAbstract="false" name="VirtualMachineRequest" >
|
||||
<UML:GeneralizableElement.generalization>
|
||||
<UML:Generalization xmi.idref="CpUcS75yCPuY" />
|
||||
</UML:GeneralizableElement.generalization>
|
||||
<UML:Classifier.feature>
|
||||
<UML:Attribute isSpecification="false" visibility="private" xmi.id="KOzAbSF4CKVu" type="OzkL9ELTDV2a" name="vid" />
|
||||
</UML:Classifier.feature>
|
||||
</UML:Class>
|
||||
<UML:Class isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="7gzMSDYTLqBr" isRoot="false" isAbstract="false" name="HostRequest" >
|
||||
<UML:GeneralizableElement.generalization>
|
||||
<UML:Generalization xmi.idref="FKzQjuw8bs3E" />
|
||||
</UML:GeneralizableElement.generalization>
|
||||
<UML:Classifier.feature>
|
||||
<UML:Attribute isSpecification="false" visibility="private" xmi.id="FlxrTroXitB1" type="uPJgv1a40kxT" name="host_info" />
|
||||
</UML:Classifier.feature>
|
||||
</UML:Class>
|
||||
<UML:Class isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="D2oeLcpAZ2wU" isRoot="false" isAbstract="false" name="vector" />
|
||||
<UML:Generalization isSpecification="false" child="Kfk2iZm22Bqb" visibility="public" namespace="Logical View" xmi.id="7hy9TcS6ScdS" parent="hmNeyEt6jRoK" discriminator="" name="" />
|
||||
<UML:Generalization isSpecification="false" child="hmNeyEt6jRoK" visibility="public" namespace="Logical View" xmi.id="CpUcS75yCPuY" parent="Kfk2iZm22Bqb" discriminator="" name="" />
|
||||
<UML:Generalization isSpecification="false" child="7gzMSDYTLqBr" visibility="public" namespace="Logical View" xmi.id="FKzQjuw8bs3E" parent="Kfk2iZm22Bqb" discriminator="" name="" />
|
||||
<UML:Class isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="a4apjOVENwJp" isRoot="false" isAbstract="false" name="ActionListener" >
|
||||
<UML:GeneralizableElement.generalization>
|
||||
<UML:Generalization xmi.idref="Us4nmxsK3Fbd" />
|
||||
</UML:GeneralizableElement.generalization>
|
||||
</UML:Class>
|
||||
<UML:Generalization isSpecification="false" child="a4apjOVENwJp" visibility="public" namespace="Logical View" xmi.id="Us4nmxsK3Fbd" parent="9OVTeRewhW26" discriminator="" name="" />
|
||||
<UML:Generalization isSpecification="false" child="9OVTeRewhW26" visibility="public" namespace="Logical View" xmi.id="GPEJepvManc6" parent="a4apjOVENwJp" discriminator="" name="" />
|
||||
<UML:Class isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="rwcHWayOoQOM" isRoot="false" isAbstract="false" name="ActionManager" />
|
||||
<UML:Generalization isSpecification="false" child="IxoXBkEH2iNc" visibility="public" namespace="Logical View" xmi.id="STpHQNlBd14y" parent="NKn4CmR9J9wA" discriminator="" name="" />
|
||||
<UML:Generalization isSpecification="false" child="IxoXBkEH2iNc" visibility="public" namespace="Logical View" xmi.id="tXImS2dZ0dSm" parent="NKn4CmR9J9wA" discriminator="" name="" />
|
||||
<UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="IIq2HkJkcZ1F" name="" >
|
||||
<UML:Association.connection>
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="hZNQHQNp0x5z" aggregation="aggregate" type="hmNeyEt6jRoK" name="" />
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="dL7rb2ArKyrb" aggregation="none" type="IxoXBkEH2iNc" name="" />
|
||||
</UML:Association.connection>
|
||||
</UML:Association>
|
||||
<UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="jALLhKaMtvk8" name="" >
|
||||
<UML:Association.connection>
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="J7yK41HgLPXu" aggregation="aggregate" type="IxoXBkEH2iNc" name="" />
|
||||
<UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="RfkjebILkdgP" aggregation="none" type="hmNeyEt6jRoK" name="" />
|
||||
</UML:Association.connection>
|
||||
</UML:Association>
|
||||
</UML:Namespace.ownedElement>
|
||||
<XMI.extension xmi.extender="umbrello" >
|
||||
<diagrams>
|
||||
<diagram snapgrid="0" showattsig="1" fillcolor="#beb6a7" linewidth="0" zoom="100" showgrid="0" showopsig="1" usefillcolor="1" snapx="10" canvaswidth="739" snapy="10" showatts="1" xmi.id="n353OZxNtUCy" documentation="" type="1" showops="1" showpackage="0" name="RequestManagerMethod" localid="" showstereotype="0" showscope="1" snapcsgrid="0" font="Sans Serif,9,-1,5,50,0,0,0,0,0" linecolor="#312e2a" canvasheight="626" >
|
||||
<widgets>
|
||||
<classwidget usesdiagramfillcolor="0" width="558" showattsigs="601" x="117" fillcolor="#beb6a7" y="29" showopsigs="601" linewidth="none" height="63" usefillcolor="1" showpubliconly="0" showattributes="1" isinstance="0" xmi.id="ABhr9zLggIYR" showoperations="1" showpackage="0" showscope="1" usesdiagramusefillcolor="0" font="Sans Serif,9,-1,5,50,1,0,0,0,0" linecolor="#312e2a" />
|
||||
<classwidget usesdiagramfillcolor="0" width="554" showattsigs="601" x="119" fillcolor="#beb6a7" y="133" showopsigs="601" linewidth="none" height="81" usefillcolor="1" showpubliconly="0" showattributes="1" isinstance="0" xmi.id="NKn4CmR9J9wA" showoperations="1" showpackage="0" showscope="1" usesdiagramusefillcolor="0" font="Sans Serif,9,-1,5,50,1,0,0,0,0" linecolor="#312e2a" />
|
||||
<classwidget usesdiagramfillcolor="0" width="125" showattsigs="601" x="550" fillcolor="#e0e4c5" y="286" showopsigs="601" linewidth="none" height="45" usefillcolor="1" showpubliconly="0" showattributes="1" isinstance="0" xmi.id="cIdSJPHjOn95" showoperations="1" showpackage="0" showscope="1" usesdiagramusefillcolor="0" font="Sans Serif,9,-1,5,50,0,0,0,0,0" linecolor="#312e2a" />
|
||||
<classwidget usesdiagramfillcolor="0" width="125" showattsigs="601" x="141" fillcolor="#e0e4c5" y="287" showopsigs="601" linewidth="none" height="45" usefillcolor="1" showpubliconly="0" showattributes="1" isinstance="0" xmi.id="IxoXBkEH2iNc" showoperations="1" showpackage="0" showscope="1" usesdiagramusefillcolor="0" font="Sans Serif,9,-1,5,75,0,0,0,0,0" linecolor="#312e2a" />
|
||||
<classwidget usesdiagramfillcolor="0" width="125" showattsigs="601" x="334" fillcolor="#e0e4c5" y="393" showopsigs="601" linewidth="none" height="45" usefillcolor="1" showpubliconly="0" showattributes="1" isinstance="0" xmi.id="IxoXBkEH2iNc" showoperations="1" showpackage="0" showscope="1" usesdiagramusefillcolor="0" font="Sans Serif,9,-1,5,75,0,0,0,0,0" linecolor="#312e2a" />
|
||||
<classwidget usesdiagramfillcolor="0" width="184" showattsigs="601" x="532" fillcolor="#e0e4c5" y="393" showopsigs="601" linewidth="none" height="45" usefillcolor="1" showpubliconly="0" showattributes="1" isinstance="0" xmi.id="hmNeyEt6jRoK" showoperations="1" showpackage="0" showscope="1" usesdiagramusefillcolor="0" font="Bitstream Vera Sans,9,-1,5,75,0,0,0,0,0" linecolor="#312e2a" />
|
||||
</widgets>
|
||||
<messages/>
|
||||
<associations>
|
||||
<assocwidget totalcounta="2" indexa="1" totalcountb="2" indexb="1" linewidth="none" widgetbid="ABhr9zLggIYR" widgetaid="NKn4CmR9J9wA" xmi.id="6Q1lx2l3BccB" type="500" linecolor="none" >
|
||||
<linepath>
|
||||
<startpoint startx="396" starty="133" />
|
||||
<endpoint endx="396" endy="92" />
|
||||
</linepath>
|
||||
</assocwidget>
|
||||
<assocwidget totalcounta="2" indexa="1" totalcountb="4" indexb="1" linewidth="none" widgetbid="NKn4CmR9J9wA" widgetaid="IxoXBkEH2iNc" xmi.id="YbRhB1qp4ZKh" type="500" linecolor="none" >
|
||||
<linepath>
|
||||
<startpoint startx="203" starty="287" />
|
||||
<endpoint endx="257" endy="214" />
|
||||
</linepath>
|
||||
</assocwidget>
|
||||
<assocwidget totalcounta="2" indexa="1" totalcountb="4" indexb="3" linewidth="none" widgetbid="NKn4CmR9J9wA" widgetaid="cIdSJPHjOn95" xmi.id="wL2zuMgsJ3aW" type="500" linecolor="none" >
|
||||
<linepath>
|
||||
<startpoint startx="612" starty="286" />
|
||||
<endpoint endx="534" endy="214" />
|
||||
</linepath>
|
||||
</assocwidget>
|
||||
<assocwidget totalcounta="2" indexa="1" totalcountb="4" indexb="2" linewidth="none" widgetbid="NKn4CmR9J9wA" widgetaid="IxoXBkEH2iNc" xmi.id="tXImS2dZ0dSm" type="500" linecolor="none" >
|
||||
<linepath>
|
||||
<startpoint startx="396" starty="393" />
|
||||
<endpoint endx="396" endy="214" />
|
||||
</linepath>
|
||||
</assocwidget>
|
||||
<assocwidget totalcounta="2" indexa="1" totalcountb="2" indexb="1" linewidth="none" widgetbid="hmNeyEt6jRoK" widgetaid="IxoXBkEH2iNc" xmi.id="jALLhKaMtvk8" type="501" linecolor="none" >
|
||||
<linepath>
|
||||
<startpoint startx="459" starty="415" />
|
||||
<endpoint endx="532" endy="415" />
|
||||
</linepath>
|
||||
</assocwidget>
|
||||
</associations>
|
||||
</diagram>
|
||||
<diagram snapgrid="0" showattsig="1" fillcolor="#c8cedf" linewidth="0" zoom="100" showgrid="0" showopsig="1" usefillcolor="1" snapx="10" canvaswidth="983" snapy="10" showatts="1" xmi.id="ME5dRbRVdp05" documentation="" type="6" showops="1" showpackage="0" name="AuthorizationAuthentication" localid="" showstereotype="0" showscope="1" snapcsgrid="0" font="Sans Serif,9,-1,5,50,0,0,0,0,0" linecolor="#436086" canvasheight="544" >
|
||||
<widgets>
|
||||
<activitywidget usesdiagramfillcolor="1" width="20" activityname="" x="145" fillcolor="none" y="245" linewidth="none" height="20" usefillcolor="1" isinstance="0" xmi.id="0cRlPqXz2a17" documentation="" activitytype="0" usesdiagramusefillcolor="1" font="Sans Serif,9,-1,5,50,0,0,0,0,0" linecolor="none" />
|
||||
<activitywidget usesdiagramfillcolor="0" width="139" activityname="client:opens session" x="86" fillcolor="#c8cedf" y="322" linewidth="none" height="28" usefillcolor="1" isinstance="0" xmi.id="RLtGJyuKbL5y" documentation="" activitytype="1" usesdiagramusefillcolor="0" font="Sans Serif,9,-1,5,50,0,0,0,0,0" linecolor="#5377a7" />
|
||||
<activitywidget usesdiagramfillcolor="0" width="261" activityname="server:creates a session and returns ID" x="25" fillcolor="#c8cedf" y="392" linewidth="none" height="28" usefillcolor="1" isinstance="0" xmi.id="9axBByGhSmjc" documentation="" activitytype="1" usesdiagramusefillcolor="0" font="Sans Serif,9,-1,5,50,0,0,0,0,0" linecolor="#5377a7" />
|
||||
<activitywidget usesdiagramfillcolor="1" width="20" activityname="" x="145" fillcolor="none" y="472" linewidth="none" height="20" usefillcolor="1" isinstance="0" xmi.id="Cgllzoj8NeJW" documentation="" activitytype="2" usesdiagramusefillcolor="1" font="Sans Serif,9,-1,5,50,0,0,0,0,0" linecolor="none" />
|
||||
<floatingtext usesdiagramfillcolor="1" width="92" x="109" fillcolor="none" y="216" linewidth="none" posttext="" role="700" height="22" usefillcolor="1" pretext="" isinstance="0" xmi.id="dXD3Jwde1ej8" text="open session" usesdiagramusefillcolor="1" font="Sans Serif,9,-1,5,50,0,0,0,0,0" linecolor="none" />
|
||||
<floatingtext usesdiagramfillcolor="1" width="160" x="404" fillcolor="none" y="11" linewidth="none" posttext="" role="700" height="22" usefillcolor="1" pretext="" isinstance="0" xmi.id="kTHmIPmrGvpk" text="send a job to the server" usesdiagramusefillcolor="1" font="Sans Serif,9,-1,5,50,0,0,0,0,0" linecolor="none" />
|
||||
<activitywidget usesdiagramfillcolor="0" width="155" activityname="client:invoke a method" x="407" fillcolor="#c8cedf" y="105" linewidth="none" height="28" usefillcolor="1" isinstance="0" xmi.id="xmtY6KPqnea3" documentation="" activitytype="1" usesdiagramusefillcolor="0" font="Sans Serif,9,-1,5,50,0,0,0,0,0" linecolor="#5377a7" />
|
||||
<activitywidget usesdiagramfillcolor="1" width="20" activityname="" x="474" fillcolor="none" y="37" linewidth="none" height="20" usefillcolor="1" isinstance="0" xmi.id="4KuKGh4aytps" documentation="" activitytype="0" usesdiagramusefillcolor="1" font="Sans Serif,9,-1,5,50,0,0,0,0,0" linecolor="none" />
|
||||
<notewidget usesdiagramfillcolor="1" width="214" x="155" fillcolor="none" y="39" linewidth="none" height="109" usefillcolor="1" isinstance="0" xmi.id="rLNYgRabDUAJ" text="the client invokes the server sending the sessionId provided, the method name and its corresponding params." usesdiagramusefillcolor="1" font="Sans Serif,9,-1,5,50,0,0,0,0,0" linecolor="none" />
|
||||
<activitywidget usesdiagramfillcolor="1" width="165" activityname="server:verify the session" x="402" fillcolor="none" y="173" linewidth="none" height="28" usefillcolor="1" isinstance="0" xmi.id="oX7ZBgdF0VYE" documentation="" activitytype="1" usesdiagramusefillcolor="1" font="Sans Serif,9,-1,5,50,0,0,0,0,0" linecolor="none" />
|
||||
<activitywidget usesdiagramfillcolor="1" width="208" activityname="server:authorize the invocation" x="380" fillcolor="none" y="311" linewidth="none" height="28" usefillcolor="1" isinstance="0" xmi.id="Dam9Tc0KvLqc" documentation="" activitytype="1" usesdiagramusefillcolor="1" font="Sans Serif,9,-1,5,50,0,0,0,0,0" linecolor="none" />
|
||||
<activitywidget usesdiagramfillcolor="1" width="20" activityname="" x="474" fillcolor="none" y="376" linewidth="none" height="20" usefillcolor="1" isinstance="0" xmi.id="mRBytLFfqLE0" documentation="" activitytype="3" usesdiagramusefillcolor="1" font="Sans Serif,9,-1,5,50,0,0,0,0,0" linecolor="none" />
|
||||
<activitywidget usesdiagramfillcolor="1" width="256" activityname="server:calls the corresponding method" x="356" fillcolor="none" y="438" linewidth="none" height="28" usefillcolor="1" isinstance="0" xmi.id="RA11WRL9W3d5" documentation="" activitytype="1" usesdiagramusefillcolor="1" font="Sans Serif,9,-1,5,50,0,0,0,0,0" linecolor="none" />
|
||||
<activitywidget usesdiagramfillcolor="0" width="167" activityname="server:returns SUCCESS" x="402" fillcolor="#c8cedf" y="512" linewidth="none" height="28" usefillcolor="1" isinstance="0" xmi.id="irOZGzIWz9I4" documentation="" activitytype="1" usesdiagramusefillcolor="0" font="Sans Serif,9,-1,5,50,0,0,0,0,0" linecolor="#436086" />
|
||||
<floatingtext usesdiagramfillcolor="1" width="76" x="397" fillcolor="none" y="404" linewidth="none" posttext="" role="700" height="22" usefillcolor="1" pretext="" isinstance="0" xmi.id="Wi0v19Q4kVkc" text="authorized" usesdiagramusefillcolor="1" font="Sans Serif,9,-1,5,50,0,0,0,0,0" linecolor="none" />
|
||||
<floatingtext usesdiagramfillcolor="1" width="101" x="518" fillcolor="none" y="353" linewidth="none" posttext="" role="700" height="22" usefillcolor="1" pretext="" isinstance="0" xmi.id="rKqpaKokdqrs" text="not authorized" usesdiagramusefillcolor="1" font="Sans Serif,9,-1,5,50,0,0,0,0,0" linecolor="none" />
|
||||
<activitywidget usesdiagramfillcolor="1" width="20" activityname="" x="653" fillcolor="none" y="516" linewidth="none" height="20" usefillcolor="1" isinstance="0" xmi.id="Bu8WPpytVwpW" documentation="" activitytype="2" usesdiagramusefillcolor="1" font="Sans Serif,9,-1,5,50,0,0,0,0,0" linecolor="none" />
|
||||
<activitywidget usesdiagramfillcolor="0" width="241" activityname="server:returns "authorization failure"" x="738" fillcolor="#c8cedf" y="372" linewidth="none" height="28" usefillcolor="1" isinstance="0" xmi.id="3FYniJNXbEKB" documentation="" activitytype="1" usesdiagramusefillcolor="0" font="Sans Serif,9,-1,5,50,0,0,0,0,0" linecolor="#436086" />
|
||||
<activitywidget usesdiagramfillcolor="1" width="20" activityname="" x="474" fillcolor="none" y="240" linewidth="none" height="20" usefillcolor="1" isinstance="0" xmi.id="RbZNOt3sYElN" documentation="" activitytype="3" usesdiagramusefillcolor="1" font="Sans Serif,9,-1,5,50,0,0,0,0,0" linecolor="none" />
|
||||
<activitywidget usesdiagramfillcolor="0" width="190" activityname="server:returns "bad session"" x="568" fillcolor="#c8cedf" y="236" linewidth="none" height="28" usefillcolor="1" isinstance="0" xmi.id="E2lFPf8DsKLq" documentation="" activitytype="1" usesdiagramusefillcolor="0" font="Sans Serif,9,-1,5,50,0,0,0,0,0" linecolor="#436086" />
|
||||
<floatingtext usesdiagramfillcolor="1" width="37" x="436" fillcolor="none" y="270" linewidth="none" posttext="" role="700" height="22" usefillcolor="1" pretext="" isinstance="0" xmi.id="0ApTYjzQaln2" text="valid" usesdiagramusefillcolor="1" font="Sans Serif,9,-1,5,50,0,0,0,0,0" linecolor="none" />
|
||||
<floatingtext usesdiagramfillcolor="1" width="48" x="506" fillcolor="none" y="216" linewidth="none" posttext="" role="700" height="22" usefillcolor="1" pretext="" isinstance="0" xmi.id="SmWZUNTO8E6Y" text="invalid" usesdiagramusefillcolor="1" font="Sans Serif,9,-1,5,50,0,0,0,0,0" linecolor="none" />
|
||||
</widgets>
|
||||
<messages/>
|
||||
<associations>
|
||||
<assocwidget totalcounta="2" indexa="1" visibilityB="200" totalcountb="2" indexb="1" linewidth="none" widgetbid="RLtGJyuKbL5y" widgetaid="0cRlPqXz2a17" roleBdoc="" documentation="" roleAdoc="" type="515" changeabilityA="900" changeabilityB="900" linecolor="none" visibilityA="200" >
|
||||
<linepath>
|
||||
<startpoint startx="155" starty="265" />
|
||||
<endpoint endx="155" endy="322" />
|
||||
</linepath>
|
||||
</assocwidget>
|
||||
<assocwidget totalcounta="2" indexa="1" visibilityB="200" totalcountb="2" indexb="1" linewidth="none" widgetbid="9axBByGhSmjc" widgetaid="RLtGJyuKbL5y" roleBdoc="" documentation="" roleAdoc="" type="515" changeabilityA="900" changeabilityB="900" linecolor="none" visibilityA="200" >
|
||||
<linepath>
|
||||
<startpoint startx="155" starty="350" />
|
||||
<endpoint endx="155" endy="392" />
|
||||
</linepath>
|
||||
</assocwidget>
|
||||
<assocwidget totalcounta="2" indexa="1" visibilityB="200" totalcountb="2" indexb="1" linewidth="none" widgetbid="Cgllzoj8NeJW" widgetaid="9axBByGhSmjc" roleBdoc="" documentation="" roleAdoc="" type="515" changeabilityA="900" changeabilityB="900" linecolor="none" visibilityA="200" >
|
||||
<linepath>
|
||||
<startpoint startx="155" starty="420" />
|
||||
<endpoint endx="155" endy="472" />
|
||||
</linepath>
|
||||
</assocwidget>
|
||||
<assocwidget totalcounta="2" indexa="1" visibilityB="200" totalcountb="2" indexb="1" linewidth="none" widgetbid="xmtY6KPqnea3" widgetaid="4KuKGh4aytps" roleBdoc="" documentation="" roleAdoc="" type="515" changeabilityA="900" changeabilityB="900" linecolor="none" visibilityA="200" >
|
||||
<linepath>
|
||||
<startpoint startx="484" starty="57" />
|
||||
<endpoint endx="484" endy="105" />
|
||||
</linepath>
|
||||
</assocwidget>
|
||||
<assocwidget totalcounta="2" indexa="1" visibilityB="200" totalcountb="2" indexb="1" linewidth="none" widgetbid="mRBytLFfqLE0" widgetaid="Dam9Tc0KvLqc" roleBdoc="" documentation="" roleAdoc="" type="515" changeabilityA="900" changeabilityB="900" linecolor="none" visibilityA="200" >
|
||||
<linepath>
|
||||
<startpoint startx="484" starty="339" />
|
||||
<endpoint endx="484" endy="376" />
|
||||
</linepath>
|
||||
</assocwidget>
|
||||
<assocwidget totalcounta="2" indexa="1" visibilityB="200" totalcountb="2" indexb="1" linewidth="none" widgetbid="oX7ZBgdF0VYE" widgetaid="xmtY6KPqnea3" roleBdoc="" documentation="" roleAdoc="" type="515" changeabilityA="900" changeabilityB="900" linecolor="none" visibilityA="200" >
|
||||
<linepath>
|
||||
<startpoint startx="484" starty="133" />
|
||||
<endpoint endx="484" endy="173" />
|
||||
</linepath>
|
||||
</assocwidget>
|
||||
<assocwidget totalcounta="2" indexa="1" visibilityB="200" totalcountb="2" indexb="1" linewidth="none" widgetbid="RA11WRL9W3d5" widgetaid="mRBytLFfqLE0" roleBdoc="" documentation="" roleAdoc="" type="515" changeabilityA="900" changeabilityB="900" linecolor="none" visibilityA="200" >
|
||||
<linepath>
|
||||
<startpoint startx="484" starty="396" />
|
||||
<endpoint endx="484" endy="438" />
|
||||
</linepath>
|
||||
</assocwidget>
|
||||
<assocwidget totalcounta="2" indexa="1" visibilityB="200" totalcountb="2" indexb="1" linewidth="none" widgetbid="irOZGzIWz9I4" widgetaid="RA11WRL9W3d5" roleBdoc="" documentation="" roleAdoc="" type="515" changeabilityA="900" changeabilityB="900" linecolor="none" visibilityA="200" >
|
||||
<linepath>
|
||||
<startpoint startx="484" starty="466" />
|
||||
<endpoint endx="485" endy="512" />
|
||||
</linepath>
|
||||
</assocwidget>
|
||||
<assocwidget totalcounta="2" indexa="1" visibilityB="200" totalcountb="2" indexb="1" linewidth="none" widgetbid="Bu8WPpytVwpW" widgetaid="3FYniJNXbEKB" roleBdoc="" documentation="" roleAdoc="" type="515" changeabilityA="900" changeabilityB="900" linecolor="none" visibilityA="200" >
|
||||
<linepath>
|
||||
<startpoint startx="858" starty="400" />
|
||||
<endpoint endx="673" endy="526" />
|
||||
</linepath>
|
||||
</assocwidget>
|
||||
<assocwidget totalcounta="2" indexa="1" visibilityB="200" totalcountb="2" indexb="1" linewidth="none" widgetbid="Bu8WPpytVwpW" widgetaid="irOZGzIWz9I4" roleBdoc="" documentation="" roleAdoc="" type="515" changeabilityA="900" changeabilityB="900" linecolor="none" visibilityA="200" >
|
||||
<linepath>
|
||||
<startpoint startx="569" starty="526" />
|
||||
<endpoint endx="653" endy="526" />
|
||||
</linepath>
|
||||
</assocwidget>
|
||||
<assocwidget totalcounta="2" indexa="1" visibilityB="200" totalcountb="2" indexb="1" linewidth="none" widgetbid="RbZNOt3sYElN" widgetaid="oX7ZBgdF0VYE" roleBdoc="" documentation="" roleAdoc="" type="515" changeabilityA="900" changeabilityB="900" linecolor="none" visibilityA="200" >
|
||||
<linepath>
|
||||
<startpoint startx="484" starty="201" />
|
||||
<endpoint endx="484" endy="240" />
|
||||
</linepath>
|
||||
</assocwidget>
|
||||
<assocwidget totalcounta="2" indexa="1" visibilityB="200" totalcountb="2" indexb="1" linewidth="none" widgetbid="Dam9Tc0KvLqc" widgetaid="RbZNOt3sYElN" roleBdoc="" documentation="" roleAdoc="" type="515" changeabilityA="900" changeabilityB="900" linecolor="none" visibilityA="200" >
|
||||
<linepath>
|
||||
<startpoint startx="484" starty="260" />
|
||||
<endpoint endx="484" endy="311" />
|
||||
</linepath>
|
||||
</assocwidget>
|
||||
<assocwidget totalcounta="2" indexa="1" visibilityB="200" totalcountb="2" indexb="1" linewidth="none" widgetbid="E2lFPf8DsKLq" widgetaid="RbZNOt3sYElN" roleBdoc="" documentation="" roleAdoc="" type="515" changeabilityA="900" changeabilityB="900" linecolor="none" visibilityA="200" >
|
||||
<linepath>
|
||||
<startpoint startx="494" starty="250" />
|
||||
<endpoint endx="568" endy="250" />
|
||||
</linepath>
|
||||
</assocwidget>
|
||||
<assocwidget totalcounta="2" indexa="1" visibilityB="200" totalcountb="2" indexb="1" linewidth="none" widgetbid="Bu8WPpytVwpW" widgetaid="E2lFPf8DsKLq" roleBdoc="" documentation="" roleAdoc="" type="515" changeabilityA="900" changeabilityB="900" linecolor="none" visibilityA="200" >
|
||||
<linepath>
|
||||
<startpoint startx="663" starty="264" />
|
||||
<endpoint endx="663" endy="516" />
|
||||
</linepath>
|
||||
</assocwidget>
|
||||
<assocwidget totalcounta="2" indexa="1" visibilityB="200" totalcountb="2" indexb="1" linewidth="none" widgetbid="3FYniJNXbEKB" widgetaid="mRBytLFfqLE0" roleBdoc="" documentation="" roleAdoc="" type="515" changeabilityA="900" changeabilityB="900" linecolor="none" visibilityA="200" >
|
||||
<linepath>
|
||||
<startpoint startx="494" starty="386" />
|
||||
<endpoint endx="738" endy="386" />
|
||||
</linepath>
|
||||
</assocwidget>
|
||||
</associations>
|
||||
</diagram>
|
||||
<diagram snapgrid="0" showattsig="1" fillcolor="#beb6a7" linewidth="0" zoom="100" showgrid="0" showopsig="1" usefillcolor="1" snapx="10" canvaswidth="805" snapy="10" showatts="1" xmi.id="4rjKTRobG8zV" documentation="" type="1" showops="1" showpackage="0" name="RequestManagerSession" localid="" showstereotype="0" showscope="1" snapcsgrid="0" font="Bitstream Vera Sans,8,-1,5,50,0,0,0,0,0" linecolor="#312e2a" canvasheight="626" >
|
||||
<widgets>
|
||||
<classwidget usesdiagramfillcolor="0" width="170" showattsigs="601" x="61" fillcolor="#beb6a7" y="101" showopsigs="601" linewidth="none" height="52" usefillcolor="1" showpubliconly="0" showattributes="1" isinstance="0" xmi.id="9OVTeRewhW26" showoperations="1" showpackage="0" showscope="1" usesdiagramusefillcolor="0" font="Bitstream Vera Sans,8,-1,5,50,0,0,0,0,0" linecolor="#312e2a" />
|
||||
<classwidget usesdiagramfillcolor="0" width="133" showattsigs="601" x="352" fillcolor="#beb6a7" y="101" showopsigs="601" linewidth="none" height="52" usefillcolor="1" showpubliconly="0" showattributes="1" isinstance="0" xmi.id="Kfk2iZm22Bqb" showoperations="1" showpackage="0" showscope="1" usesdiagramusefillcolor="0" font="Bitstream Vera Sans,8,-1,5,50,0,0,0,0,0" linecolor="#312e2a" />
|
||||
<classwidget usesdiagramfillcolor="0" width="160" showattsigs="601" x="237" fillcolor="#e0e4c5" y="225" showopsigs="601" linewidth="none" height="37" usefillcolor="1" showpubliconly="0" showattributes="1" isinstance="0" xmi.id="hmNeyEt6jRoK" showoperations="1" showpackage="0" showscope="1" usesdiagramusefillcolor="0" font="Bitstream Vera Sans,8,-1,5,75,0,0,0,0,0" linecolor="#312e2a" />
|
||||
<classwidget usesdiagramfillcolor="0" width="227" showattsigs="601" x="414" fillcolor="#e0e4c5" y="226" showopsigs="601" linewidth="none" height="37" usefillcolor="1" showpubliconly="0" showattributes="1" isinstance="0" xmi.id="7gzMSDYTLqBr" showoperations="1" showpackage="0" showscope="1" usesdiagramusefillcolor="0" font="Bitstream Vera Sans,8,-1,5,75,0,0,0,0,0" linecolor="#312e2a" />
|
||||
<notewidget usesdiagramfillcolor="0" width="226" x="575" fillcolor="#c4c5c7" y="82" linewidth="none" height="118" usefillcolor="1" isinstance="0" xmi.id="WpnMdkhFMiS5" text="Specialization of SessionRequest contains specific input/output attributes for the method.
|
||||
The SessionRequest will be used to communicate the RequestManager with other nebula components" usesdiagramusefillcolor="1" font="Bitstream Vera Sans,8,-1,5,50,0,0,0,0,0" linecolor="none" />
|
||||
<classwidget usesdiagramfillcolor="1" width="104" showattsigs="601" x="93" fillcolor="none" y="30" showopsigs="601" linewidth="none" height="29" usefillcolor="1" showpubliconly="0" showattributes="1" isinstance="0" xmi.id="a4apjOVENwJp" showoperations="1" showpackage="0" showscope="1" usesdiagramusefillcolor="1" font="Bitstream Vera Sans,8,-1,5,50,0,0,0,0,0" linecolor="none" />
|
||||
</widgets>
|
||||
<messages/>
|
||||
<associations>
|
||||
<assocwidget totalcounta="2" indexa="1" totalcountb="2" indexb="1" linewidth="none" widgetbid="Kfk2iZm22Bqb" widgetaid="9OVTeRewhW26" xmi.id="PyatuGF3ckUE" type="510" linecolor="none" >
|
||||
<linepath>
|
||||
<startpoint startx="231" starty="127" />
|
||||
<endpoint endx="352" endy="127" />
|
||||
</linepath>
|
||||
<floatingtext usesdiagramfillcolor="1" width="29" x="321" fillcolor="none" y="106" linewidth="none" posttext="" role="702" height="19" usefillcolor="1" pretext="" isinstance="0" xmi.id="IApm141uchRF" text="1..*" usesdiagramusefillcolor="1" font="Bitstream Vera Sans,8,-1,5,50,0,0,0,0,0" linecolor="none" />
|
||||
</assocwidget>
|
||||
<assocwidget totalcounta="2" indexa="1" totalcountb="3" indexb="1" linewidth="none" widgetbid="Kfk2iZm22Bqb" widgetaid="hmNeyEt6jRoK" xmi.id="CpUcS75yCPuY" type="500" linecolor="none" >
|
||||
<linepath>
|
||||
<startpoint startx="317" starty="225" />
|
||||
<endpoint endx="396" endy="153" />
|
||||
</linepath>
|
||||
</assocwidget>
|
||||
<assocwidget totalcounta="2" indexa="1" totalcountb="3" indexb="2" linewidth="none" widgetbid="Kfk2iZm22Bqb" widgetaid="7gzMSDYTLqBr" xmi.id="FKzQjuw8bs3E" type="500" linecolor="none" >
|
||||
<linepath>
|
||||
<startpoint startx="527" starty="226" />
|
||||
<endpoint endx="440" endy="153" />
|
||||
</linepath>
|
||||
</assocwidget>
|
||||
<assocwidget totalcounta="2" indexa="1" totalcountb="2" indexb="1" linewidth="none" widgetbid="a4apjOVENwJp" widgetaid="9OVTeRewhW26" xmi.id="GPEJepvManc6" type="500" linecolor="none" >
|
||||
<linepath>
|
||||
<startpoint startx="146" starty="101" />
|
||||
<endpoint endx="145" endy="59" />
|
||||
</linepath>
|
||||
</assocwidget>
|
||||
</associations>
|
||||
</diagram>
|
||||
</diagrams>
|
||||
</XMI.extension>
|
||||
</UML:Model>
|
||||
<UML:Model stereotype="folder" isSpecification="false" isLeaf="false" visibility="public" namespace="m1" xmi.id="Use Case View" isRoot="false" isAbstract="false" name="Use Case View" >
|
||||
<UML:Namespace.ownedElement/>
|
||||
</UML:Model>
|
||||
<UML:Model stereotype="folder" isSpecification="false" isLeaf="false" visibility="public" namespace="m1" xmi.id="Component View" isRoot="false" isAbstract="false" name="Component View" >
|
||||
<UML:Namespace.ownedElement/>
|
||||
</UML:Model>
|
||||
<UML:Model stereotype="folder" isSpecification="false" isLeaf="false" visibility="public" namespace="m1" xmi.id="Deployment View" isRoot="false" isAbstract="false" name="Deployment View" >
|
||||
<UML:Namespace.ownedElement/>
|
||||
</UML:Model>
|
||||
<UML:Model stereotype="folder" isSpecification="false" isLeaf="false" visibility="public" namespace="m1" xmi.id="Entity Relationship Model" isRoot="false" isAbstract="false" name="Entity Relationship Model" >
|
||||
<UML:Namespace.ownedElement/>
|
||||
</UML:Model>
|
||||
</UML:Namespace.ownedElement>
|
||||
</UML:Model>
|
||||
</XMI.content>
|
||||
<XMI.extensions xmi.extender="umbrello" >
|
||||
<docsettings viewid="4rjKTRobG8zV" documentation="" uniqueid="RfkjebILkdgP" />
|
||||
<listview>
|
||||
<listitem open="1" type="800" label="Views" >
|
||||
<listitem open="1" type="801" id="Logical View" >
|
||||
<listitem open="0" type="807" id="n353OZxNtUCy" label="RequestManagerMethod" />
|
||||
<listitem open="0" type="807" id="4rjKTRobG8zV" label="RequestManagerSession" />
|
||||
<listitem open="0" type="809" id="ME5dRbRVdp05" label="AuthorizationAuthentication" />
|
||||
<listitem open="1" type="813" id="a4apjOVENwJp" />
|
||||
<listitem open="1" type="813" id="rwcHWayOoQOM" />
|
||||
<listitem open="1" type="813" id="7gzMSDYTLqBr" >
|
||||
<listitem open="0" type="814" id="FlxrTroXitB1" />
|
||||
</listitem>
|
||||
<listitem open="1" type="813" id="cIdSJPHjOn95" >
|
||||
<listitem open="0" type="815" id="eIxbkWipq2Q4" />
|
||||
</listitem>
|
||||
<listitem open="1" type="813" id="IxoXBkEH2iNc" >
|
||||
<listitem open="0" type="815" id="vdgviGsHoHwS" />
|
||||
</listitem>
|
||||
<listitem open="1" type="813" id="NKn4CmR9J9wA" >
|
||||
<listitem open="0" type="815" id="UxNBZAWWHlyW" />
|
||||
<listitem open="0" type="815" id="J5stk8UazE5N" />
|
||||
<listitem open="0" type="815" id="3qvFtHzZhaK8" />
|
||||
</listitem>
|
||||
<listitem open="1" type="813" id="9OVTeRewhW26" >
|
||||
<listitem open="0" type="814" id="IOxkc5pFT5Tl" />
|
||||
<listitem open="0" type="814" id="y1MXmwdXeqM6" />
|
||||
</listitem>
|
||||
<listitem open="1" type="813" id="Kfk2iZm22Bqb" >
|
||||
<listitem open="0" type="814" id="YxSt1fUJvfKc" />
|
||||
<listitem open="0" type="814" id="A5fOIFI1018W" />
|
||||
</listitem>
|
||||
<listitem open="1" type="813" id="hmNeyEt6jRoK" >
|
||||
<listitem open="0" type="814" id="KOzAbSF4CKVu" />
|
||||
</listitem>
|
||||
<listitem open="0" type="813" id="SzXQhVokEGyj" >
|
||||
<listitem open="0" type="815" id="WGYjuvRmUCLt" />
|
||||
</listitem>
|
||||
<listitem open="1" type="813" id="D2oeLcpAZ2wU" />
|
||||
<listitem open="1" type="818" id="qneGDX083w3i" />
|
||||
<listitem open="0" type="818" id="A0oHpJFBuM08" >
|
||||
<listitem open="0" type="813" id="ABhr9zLggIYR" >
|
||||
<listitem open="0" type="815" id="9puD8vuOpmf4" />
|
||||
<listitem open="0" type="815" id="wYvrZ0vQlZgw" />
|
||||
</listitem>
|
||||
</listitem>
|
||||
<listitem open="0" type="829" id="nUQ9f913QOMM" />
|
||||
<listitem open="0" type="829" id="EMRvUrR9qL3O" />
|
||||
<listitem open="0" type="829" id="Yjj4VCmK2mbw" />
|
||||
<listitem open="1" type="830" id="Datatypes" >
|
||||
<listitem open="0" type="829" id="ujRn7KhgOaI5" />
|
||||
<listitem open="1" type="829" id="KwxEP7Cn7u8G" />
|
||||
<listitem open="0" type="829" id="lKqf5qfggNDJ" />
|
||||
<listitem open="1" type="829" id="GKGmCBizDn1b" />
|
||||
<listitem open="0" type="829" id="FZaWvz4Y3a8w" />
|
||||
<listitem open="0" type="829" id="wLpNDzHPeTkz" />
|
||||
<listitem open="0" type="829" id="6x5vSHnAP3tD" />
|
||||
<listitem open="0" type="829" id="WPOhoYL5TrAu" />
|
||||
<listitem open="1" type="829" id="Ig9VRA4m4zyT" />
|
||||
<listitem open="1" type="829" id="7RhIxhsDz8zB" />
|
||||
<listitem open="1" type="829" id="OzkL9ELTDV2a" />
|
||||
<listitem open="1" type="829" id="mLwlRuxha4Az" />
|
||||
<listitem open="1" type="829" id="h4aNsLSHP5Er" />
|
||||
<listitem open="1" type="829" id="7AGE3NSAo7Sl" />
|
||||
<listitem open="0" type="829" id="FCjdx8dQApja" />
|
||||
<listitem open="0" type="829" id="2ifvlTtK9OtT" />
|
||||
<listitem open="0" type="829" id="vs9aeZKVqvbr" />
|
||||
<listitem open="0" type="829" id="N39BeTbjRUoX" />
|
||||
<listitem open="0" type="829" id="R42BV1zRDazt" />
|
||||
<listitem open="0" type="829" id="omJJ8BODLS05" />
|
||||
<listitem open="0" type="829" id="OO1obhIymcoD" />
|
||||
<listitem open="0" type="829" id="dHJzFzh130gV" />
|
||||
<listitem open="0" type="829" id="hMqEiSn6H7Jh" />
|
||||
<listitem open="1" type="829" id="gfhWe8Nx2Q50" />
|
||||
<listitem open="0" type="829" id="dIcQVo6Mtx6m" />
|
||||
<listitem open="0" type="829" id="moqwOtwyeNyb" />
|
||||
<listitem open="0" type="829" id="6E5W7867gNNe" />
|
||||
<listitem open="0" type="829" id="Bhqn7O4dxRLU" />
|
||||
<listitem open="1" type="829" id="CDjGAhkHqyTt" />
|
||||
<listitem open="1" type="829" id="kTvIX4FhHzxR" />
|
||||
<listitem open="1" type="829" id="Lt3A0VtmoqWE" />
|
||||
<listitem open="1" type="829" id="uPJgv1a40kxT" />
|
||||
<listitem open="0" type="829" id="IWTX3d9958g6" />
|
||||
<listitem open="0" type="829" id="t44p7k8gEWBe" />
|
||||
<listitem open="0" type="829" id="RqSbCcTtZRId" />
|
||||
<listitem open="0" type="829" id="m37A5WkcCLCs" />
|
||||
<listitem open="0" type="829" id="PYy0daZfZgLk" />
|
||||
<listitem open="0" type="829" id="6yyeXysFdTiE" />
|
||||
<listitem open="0" type="829" id="KjHCVYuP989S" />
|
||||
<listitem open="0" type="829" id="FznJh4xRuoHi" />
|
||||
<listitem open="0" type="829" id="HwY7TNWM8fWv" />
|
||||
<listitem open="0" type="829" id="IObxMYpj7Dml" />
|
||||
<listitem open="0" type="829" id="6FilU9Nsf7nu" />
|
||||
<listitem open="0" type="829" id="8uOJiEoJIWlZ" />
|
||||
<listitem open="0" type="829" id="HUmSL95BsE5N" />
|
||||
<listitem open="0" type="829" id="jXC197XkGQxv" />
|
||||
<listitem open="0" type="829" id="qUW8N97wj9eu" />
|
||||
<listitem open="0" type="829" id="d2JI76BIQgcy" />
|
||||
</listitem>
|
||||
</listitem>
|
||||
<listitem open="1" type="802" id="Use Case View" />
|
||||
<listitem open="1" type="821" id="Component View" />
|
||||
<listitem open="1" type="827" id="Deployment View" />
|
||||
<listitem open="1" type="836" id="Entity Relationship Model" />
|
||||
</listitem>
|
||||
</listview>
|
||||
<codegeneration>
|
||||
<codegenerator language="C++" />
|
||||
</codegeneration>
|
||||
</XMI.extensions>
|
||||
</XMI>
|
1294
share/doc/nebula/nebula.doxyfile
Normal file
1294
share/doc/nebula/nebula.doxyfile
Normal file
File diff suppressed because it is too large
Load Diff
10
share/etc/default/vmm_xen.conf
Normal file
10
share/etc/default/vmm_xen.conf
Normal file
@ -0,0 +1,10 @@
|
||||
#
|
||||
# Default configuration attributes for the Xen driver
|
||||
# (all domains will use these values as defaults)
|
||||
#
|
||||
|
||||
MEMORY = 128
|
||||
|
||||
KERNEL = /vmlinuz
|
||||
|
||||
RAMDISK = /initrd.img
|
36
share/etc/mad/defaultrc
Normal file
36
share/etc/mad/defaultrc
Normal file
@ -0,0 +1,36 @@
|
||||
# -------------------------------------------------------------------------- #
|
||||
# Copyright 2002-2008, Distributed Systems Architecture Group, Universidad #
|
||||
# Complutense de Madrid (dsa-research.org) #
|
||||
# #
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may #
|
||||
# not use this file except in compliance with the License. You may obtain #
|
||||
# a copy of the License at #
|
||||
# #
|
||||
# http://www.apache.org/licenses/LICENSE-2.0 #
|
||||
# #
|
||||
# Unless required by applicable law or agreed to in writing, software #
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, #
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. #
|
||||
# See the License for the specific language governing permissions and #
|
||||
# limitations under the License. #
|
||||
#--------------------------------------------------------------------------- #
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# Global environment configuration file for ONE MADS
|
||||
# --------------------------------------------------------
|
||||
#
|
||||
# This file is sourced before a driver is started. Also the variables
|
||||
# declared here are "exported".
|
||||
#
|
||||
# Values in this file will be overridden or completed by the MAD
|
||||
# specific rc file.
|
||||
#
|
||||
# This file MUST preserve SH syntax
|
||||
#-------------------------------------------------------------------------------
|
||||
|
||||
# MADs will generate cores and logs if defined
|
||||
ONE_MAD_DEBUG=
|
||||
|
||||
# Nice Priority to run the drivers
|
||||
PRIORITY=19
|
||||
|
16
share/etc/mad/im_sshrc
Normal file
16
share/etc/mad/im_sshrc
Normal file
@ -0,0 +1,16 @@
|
||||
# -------------------------------------------------------------------------- #
|
||||
# Copyright 2002-2008, Distributed Systems Architecture Group, Universidad #
|
||||
# Complutense de Madrid (dsa-research.org) #
|
||||
# #
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may #
|
||||
# not use this file except in compliance with the License. You may obtain #
|
||||
# a copy of the License at #
|
||||
# #
|
||||
# http://www.apache.org/licenses/LICENSE-2.0 #
|
||||
# #
|
||||
# Unless required by applicable law or agreed to in writing, software #
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, #
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. #
|
||||
# See the License for the specific language governing permissions and #
|
||||
# limitations under the License. #
|
||||
#--------------------------------------------------------------------------- #
|
16
share/etc/mad/vmm_xenrc
Normal file
16
share/etc/mad/vmm_xenrc
Normal file
@ -0,0 +1,16 @@
|
||||
# -------------------------------------------------------------------------- #
|
||||
# Copyright 2002-2008, Distributed Systems Architecture Group, Universidad #
|
||||
# Complutense de Madrid (dsa-research.org) #
|
||||
# #
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may #
|
||||
# not use this file except in compliance with the License. You may obtain #
|
||||
# a copy of the License at #
|
||||
# #
|
||||
# http://www.apache.org/licenses/LICENSE-2.0 #
|
||||
# #
|
||||
# Unless required by applicable law or agreed to in writing, software #
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, #
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. #
|
||||
# See the License for the specific language governing permissions and #
|
||||
# limitations under the License. #
|
||||
#--------------------------------------------------------------------------- #
|
41
share/etc/oned.conf
Normal file
41
share/etc/oned.conf
Normal file
@ -0,0 +1,41 @@
|
||||
#
|
||||
# VM_RDIR: The VM "remote" directory stores VM related data on the target host.
|
||||
# Each VM has its own directory ($VM_HOME) within the $VM_DIR, $VMDIR/$VID
|
||||
# Set this variable to the mount point of $ONE_LOCATION/var/
|
||||
# if needed as it defaults to this value
|
||||
#VM_RDIR=/vCluster/var
|
||||
|
||||
# Time in seconds between host monitorization
|
||||
HOST_MONITORING_INTERVAL=10
|
||||
|
||||
# Information manager configuration. You can add more information managers with different
|
||||
# configuration but make sure it has different names.
|
||||
#
|
||||
# name: name for this information manager
|
||||
# executable: path of the information manager executable, can be an absolute path or
|
||||
# a relative path from $ONE_LOCATION
|
||||
# arguments: path where the information manager configuration resides, can also
|
||||
# be a relative path
|
||||
# owner: user that will be used for monitoring (we recommend this to be <oneadmin>)
|
||||
#
|
||||
IM_MAD=[name="one_im",executable="bin/one_im_ssh",arguments="etc/one_im_ssh.conf",owner="oneadmin"]
|
||||
|
||||
# Time in seconds between virtual machine monitorization
|
||||
VM_POLLING_INTERVAL=10
|
||||
|
||||
# Virtual Machine Manager configuration. This component does not have a configuration
|
||||
# file. You can change the path of xentop in remote machines changing
|
||||
# XENTOP_PATH in the beginning of this script.
|
||||
#
|
||||
# name: name of the virtual manager configuration
|
||||
# executable: path of the virtual machine manager executable, can be an absolute path or
|
||||
# a relative path from $ONE_LOCATION
|
||||
# owner: user that will be used for vm managing (we recommend this to be <oneadmin>)
|
||||
# config: defult values and configuration parameters for the driver
|
||||
|
||||
|
||||
VM_MAD=[name="one_vmm",executable="bin/one_vmm_xen",owner="oneadmin",default="etc/default/vmm_xen.conf"]
|
||||
|
||||
# Port where oned will listen for xmlrpc calls.
|
||||
PORT=2633
|
||||
|
6
share/examples/vm.template
Normal file
6
share/examples/vm.template
Normal file
@ -0,0 +1,6 @@
|
||||
DISK=[image="/local/xen/domains/xen-etch/disk.img",dev="sda1",mode=w]
|
||||
DISK=[image="/local/xen/domains/xen-etch/swap.img",dev="sda2",mode=w]
|
||||
KERNEL=/boot/vmlinuz-2.6.18-4-xen-amd64
|
||||
RAMDISK=/boot/initrd.img-2.6.18-4-xen-amd64
|
||||
MEMORY=64
|
||||
CPU=1
|
64
share/scons/lex_bison.py
Normal file
64
share/scons/lex_bison.py
Normal file
@ -0,0 +1,64 @@
|
||||
|
||||
import os
|
||||
import SCons
|
||||
|
||||
############
|
||||
# BUILDERS #
|
||||
############
|
||||
|
||||
def build_lex(target, source, env):
|
||||
cwd=os.getcwd()
|
||||
|
||||
src=SCons.Util.to_String(source[0])
|
||||
src_dir=os.path.dirname(src)
|
||||
src_name=os.path.basename(src)
|
||||
|
||||
os.chdir(src_dir)
|
||||
os.system("flex "+src_name)
|
||||
os.chdir(cwd)
|
||||
|
||||
return None
|
||||
|
||||
def emitter_lex(target, source, env):
|
||||
src=SCons.Util.to_String(source[0])
|
||||
src_dir=os.path.dirname(src)
|
||||
(src_name, src_ext)=os.path.splitext(os.path.basename(src))
|
||||
target.append(src_name+".h")
|
||||
return target, source
|
||||
|
||||
def add_lex(environment):
|
||||
lex_bld=SCons.Builder.Builder(action=build_lex,
|
||||
suffix='.c',
|
||||
src_suffix='.l',
|
||||
emitter=emitter_lex)
|
||||
environment.Append(BUILDERS={'Lex':lex_bld})
|
||||
|
||||
|
||||
def build_bison(target, source, env):
|
||||
cwd=os.getcwd()
|
||||
|
||||
src=SCons.Util.to_String(source[0])
|
||||
src_dir=os.path.dirname(src)
|
||||
src_name=os.path.basename(src)
|
||||
(base, ext)=os.path.splitext(src_name)
|
||||
|
||||
os.chdir(src_dir)
|
||||
os.system("bison "+src_name)
|
||||
os.rename(base+".hh", base+".h")
|
||||
os.chdir(cwd)
|
||||
|
||||
return None
|
||||
|
||||
def emitter_bison(target, source, env):
|
||||
src=SCons.Util.to_String(source[0])
|
||||
src_dir=os.path.dirname(src)
|
||||
(src_name, src_ext)=os.path.splitext(os.path.basename(src))
|
||||
target.append(src_name+".h")
|
||||
return target, source
|
||||
|
||||
def add_bison(environment):
|
||||
bison_bld=SCons.Builder.Builder(action=build_bison,
|
||||
suffix='.cc',
|
||||
src_suffix='.y',
|
||||
emitter=emitter_bison)
|
||||
environment.Append(BUILDERS={'Bison':bison_bld})
|
81
share/scripts/madcommon.sh
Normal file
81
share/scripts/madcommon.sh
Normal file
@ -0,0 +1,81 @@
|
||||
# -------------------------------------------------------------------------- #
|
||||
# Copyright 2002-2008, Distributed Systems Architecture Group, Universidad #
|
||||
# Complutense de Madrid (dsa-research.org) #
|
||||
# #
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may #
|
||||
# not use this file except in compliance with the License. You may obtain #
|
||||
# a copy of the License at #
|
||||
# #
|
||||
# http://www.apache.org/licenses/LICENSE-2.0 #
|
||||
# #
|
||||
# Unless required by applicable law or agreed to in writing, software #
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, #
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. #
|
||||
# See the License for the specific language governing permissions and #
|
||||
# limitations under the License. #
|
||||
#--------------------------------------------------------------------------- #
|
||||
|
||||
function mad_debug
|
||||
{
|
||||
if [ -n "${ONE_MAD_DEBUG}" ]; then
|
||||
ulimit -c 15000
|
||||
fi
|
||||
}
|
||||
|
||||
function export_rc_vars
|
||||
{
|
||||
if [ -f $1 ] ; then
|
||||
ONE_VARS=`cat $1 | egrep -e '^[a-zA-Z\-\_0-9]*=' | sed 's/=.*$//'`
|
||||
|
||||
. $1
|
||||
|
||||
for v in $ONE_VARS; do
|
||||
export $v
|
||||
done
|
||||
fi
|
||||
}
|
||||
|
||||
function log_with_date
|
||||
{
|
||||
PID=$$
|
||||
LOG_FILE=$1
|
||||
shift
|
||||
|
||||
mkfifo /tmp/one_fifo.$PID.err /tmp/one_fifo.$PID.out
|
||||
|
||||
# This line creates an empty log file
|
||||
echo -n "" > $LOG_FILE
|
||||
|
||||
# Write out fifo to STDOUT
|
||||
cat /tmp/one_fifo.$PID.out &
|
||||
|
||||
while read line < /tmp/one_fifo.$PID.err
|
||||
do
|
||||
echo `date +"%D %T"`: $line >> $LOG_FILE
|
||||
done &
|
||||
|
||||
$* 2>/tmp/one_fifo.$PID.err 1>/tmp/one_fifo.$PID.out
|
||||
|
||||
rm /tmp/one_fifo.$PID.out /tmp/one_fifo.$PID.err
|
||||
}
|
||||
|
||||
function execute_mad
|
||||
{
|
||||
MAD_FILE=`basename $0`
|
||||
|
||||
if [ -n "${ONE_MAD_DEBUG}" ]; then
|
||||
log_with_date var/$MAD_FILE.log nice -n $PRIORITY bin/$MAD_FILE.rb $*
|
||||
else
|
||||
exec nice -n $PRIORITY bin/$MAD_FILE.rb $* 2> /dev/null
|
||||
fi
|
||||
}
|
||||
|
||||
|
||||
# Set global environment
|
||||
|
||||
export_rc_vars $ONE_LOCATION/etc/defaultrc
|
||||
|
||||
# Sanitize PRIORITY variable
|
||||
if [ -z "$PRIORITY" ]; then
|
||||
export PRIORITY=19
|
||||
fi
|
110
share/scripts/one
Executable file
110
share/scripts/one
Executable file
@ -0,0 +1,110 @@
|
||||
#! /bin/sh
|
||||
|
||||
if [ -z "$ONE_LOCATION" ]; then
|
||||
echo "ONE_LOCATION is not defined"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
ONE_PID=$ONE_LOCATION/var/oned.pid
|
||||
ONE_SCHEDPID=$ONE_LOCATION/var/sched.pid
|
||||
ONE_CONF=$ONE_LOCATION/etc/oned.conf
|
||||
|
||||
ONED=$ONE_LOCATION/bin/oned
|
||||
ONE_SCHEDULER=$ONE_LOCATION/bin/mm_sched
|
||||
|
||||
setup()
|
||||
{
|
||||
PORT=`cat $ONE_CONF | grep ^PORT= | cut -d= -f2`
|
||||
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "Can not find PORT in $ONE_CONF."
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
start()
|
||||
{
|
||||
if [ ! -x "$ONED" ]; then
|
||||
echo "Can not find $ONED."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ ! -x "$ONE_SCHEDULER" ]; then
|
||||
echo "Can not find $ONE_SCHEDULER."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Start the one daemon
|
||||
$ONED -f 2>&1 &
|
||||
|
||||
LASTRC=$?
|
||||
LASTPID=$!
|
||||
|
||||
if [ $LASTRC -ne 0 ]; then
|
||||
echo "Error executing $ONED"
|
||||
exit 1
|
||||
else
|
||||
echo $LASTPID > $ONE_PID
|
||||
fi
|
||||
|
||||
# Start the scheduler
|
||||
$ONE_SCHEDULER -p $PORT &
|
||||
|
||||
LASTRC=$?
|
||||
LASTPID=$!
|
||||
|
||||
if [ $LASTRC -ne 0 ]; then
|
||||
echo "Error executing $ONE_SCHEDULER"
|
||||
exit 1
|
||||
else
|
||||
echo $LASTPID > $ONE_SCHEDPID
|
||||
fi
|
||||
|
||||
echo "oned and scheduler started"
|
||||
}
|
||||
|
||||
#
|
||||
# Function that stops the daemon/service
|
||||
#
|
||||
stop()
|
||||
{
|
||||
if [ ! -f $ONE_PID ]; then
|
||||
echo "Couldn't find oned process pid."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ ! -f $ONE_SCHEDPID ]; then
|
||||
echo "Couldn't find scheduler process pid."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Kill the one daemon
|
||||
|
||||
kill `cat $ONE_PID`
|
||||
|
||||
# Kill the scheduler
|
||||
|
||||
kill `cat $ONE_SCHEDPID`
|
||||
|
||||
# Remove pid files
|
||||
|
||||
rm -f $ONE_PID > /dev/null 2>&1
|
||||
rm -f $ONE_SCHEDPID > /dev/null 2>&1
|
||||
|
||||
echo "oned and scheduler stopped"
|
||||
}
|
||||
|
||||
|
||||
case "$1" in
|
||||
start)
|
||||
setup
|
||||
start
|
||||
;;
|
||||
stop)
|
||||
stop
|
||||
;;
|
||||
*)
|
||||
echo "Usage: nebula {start|stop}" >&2
|
||||
exit 3
|
||||
;;
|
||||
esac
|
BIN
share/test/one.db
Normal file
BIN
share/test/one.db
Normal file
Binary file not shown.
67
share/test/src/common/AMTest.cc
Normal file
67
share/test/src/common/AMTest.cc
Normal file
@ -0,0 +1,67 @@
|
||||
#include "ActionManager.h"
|
||||
#include <iostream>
|
||||
#include <cerrno>
|
||||
|
||||
class AMTest : public ActionListener
|
||||
{
|
||||
public:
|
||||
AMTest():am()
|
||||
{
|
||||
am.addListener(this);
|
||||
};
|
||||
|
||||
~AMTest(){};
|
||||
|
||||
ActionManager am;
|
||||
|
||||
private:
|
||||
void do_action(const string &action, void * arg);
|
||||
};
|
||||
|
||||
void AMTest::do_action(const string &action, void * arg)
|
||||
{
|
||||
int * i = static_cast<int *>(arg);
|
||||
|
||||
cout<<"Event received: "<<action<<" Argument : "<<*i<<"\n";
|
||||
}
|
||||
|
||||
extern "C" void * startThread(void *arg)
|
||||
{
|
||||
AMTest * MT;
|
||||
int i = 8;
|
||||
string event("ACTION_TEST");
|
||||
|
||||
MT = static_cast<AMTest *> (arg);
|
||||
|
||||
MT->am.trigger(event,&i);
|
||||
|
||||
sleep(4);
|
||||
|
||||
i = 10;
|
||||
|
||||
MT->am.trigger(event,&i);
|
||||
|
||||
i = 23;
|
||||
|
||||
MT->am.trigger(ActionListener::ACTION_FINALIZE,&i);
|
||||
|
||||
return 0;
|
||||
}
|
||||
/*
|
||||
int main()
|
||||
{
|
||||
pthread_t id;
|
||||
int i = 3;
|
||||
AMTest * MT = new AMTest();
|
||||
|
||||
pthread_create(&id, 0, startThread, MT);
|
||||
|
||||
MT->am.loop(1,&i);
|
||||
|
||||
delete MT;
|
||||
|
||||
pthread_join(id,0);
|
||||
|
||||
return 0;
|
||||
}
|
||||
*/
|
252
share/test/src/host/TestHostPool.cc
Normal file
252
share/test/src/host/TestHostPool.cc
Normal file
@ -0,0 +1,252 @@
|
||||
#include "VirtualMachine.h"
|
||||
#include "VirtualMachineManagerDriver.h"
|
||||
#include "Nebula.h"
|
||||
|
||||
#include "InformationManagerDriver.h"
|
||||
#include "InformationManager.h"
|
||||
#include "Mad.h"
|
||||
|
||||
#include "Host.h"
|
||||
#include "HostPool.h"
|
||||
|
||||
|
||||
|
||||
#include <string>
|
||||
#include <iostream>
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <stdexcept>
|
||||
|
||||
#include <signal.h>
|
||||
#include <unistd.h>
|
||||
#include <fcntl.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/stat.h>
|
||||
#include <pthread.h>
|
||||
|
||||
#include <climits>
|
||||
#include <sstream>
|
||||
|
||||
extern "C" void *test(void *nothing)
|
||||
{
|
||||
ostringstream os;
|
||||
|
||||
sleep(2);
|
||||
os.str("");
|
||||
|
||||
int rc;
|
||||
|
||||
Nebula & pn = Nebula::instance();
|
||||
|
||||
HostPool * thepool = pn.get_hpool();
|
||||
Host * host;
|
||||
int hid;
|
||||
|
||||
thepool->bootstrap();
|
||||
|
||||
thepool->allocate(&hid,"foo.dacya","mad1","mad2","mad3",true);
|
||||
|
||||
os.str("");
|
||||
os << "Host " << hid << " allocated";
|
||||
Nebula::log("TST", Log::ERROR, os);
|
||||
|
||||
thepool->allocate(&hid,"foo2.dacya","mad1","mad2","mad3",true);
|
||||
|
||||
os.str("");
|
||||
os << "Host " << hid << " allocated";
|
||||
Nebula::log("TST", Log::ERROR, os);
|
||||
|
||||
thepool->allocate(&hid,"foo3.dacya","mad1","mad2","mad3",true);
|
||||
|
||||
os.str("");
|
||||
os << "Host " << hid << " allocated";
|
||||
Nebula::log("TST", Log::ERROR, os);
|
||||
|
||||
host = static_cast<Host *>(thepool->get(3422,false));
|
||||
|
||||
if (host != 0)
|
||||
{
|
||||
os.str("");
|
||||
os << "Test failed. Shouldn't be here.";
|
||||
Nebula::log("TST", Log::ERROR, os);
|
||||
}
|
||||
|
||||
host = static_cast<Host *>(thepool->get(0,true));
|
||||
|
||||
if (host != 0)
|
||||
{
|
||||
os.str("");
|
||||
os << "Going fine. Host " << *host << " retrieved.";
|
||||
Nebula::log("TST", Log::ERROR, os);
|
||||
|
||||
host->unlock();
|
||||
}
|
||||
else
|
||||
{
|
||||
os.str("");
|
||||
os << "Test failed!. Not able to retrieve host 0";
|
||||
Nebula::log("TST", Log::ERROR, os);
|
||||
}
|
||||
|
||||
|
||||
Host * host2 = static_cast<Host *>(thepool->get(1,false));
|
||||
|
||||
if (host2 != 0)
|
||||
{
|
||||
os.str("");
|
||||
os << "Going fine. Host " << *host2 << " retrieved.";
|
||||
Nebula::log("TST", Log::ERROR, os);
|
||||
}
|
||||
|
||||
Host * host3 = static_cast<Host *>(thepool->get(2,false));
|
||||
|
||||
if (host3 != 0)
|
||||
{
|
||||
os.str("");
|
||||
os << "Going fine. Host " << *host3 << " retrieved.";
|
||||
Nebula::log("TST", Log::ERROR, os);
|
||||
|
||||
}
|
||||
|
||||
|
||||
Host * host4 = static_cast<Host *>(thepool->get(32,false));
|
||||
|
||||
|
||||
if (host4 != 0)
|
||||
{
|
||||
os.str("");
|
||||
os << "Going fine. Host " << *host4 << " retrieved.";
|
||||
Nebula::log("TST", Log::ERROR, os);
|
||||
|
||||
}
|
||||
|
||||
host3->lock();
|
||||
|
||||
string host_info_str("cpuArchitecture=x86_32\nnumberCores=1\ncpuSpeed=2211\ntotalMemory=2046\nfreeMemory=125\nusedMemory=1921\ncpupercentage=50\nnetTX=78516\nnetRX=138612\nnetRX=138612\n");
|
||||
rc = host3->update_info(host_info_str);
|
||||
|
||||
host3->touch();
|
||||
|
||||
|
||||
os.str("");
|
||||
os << "updated host info with RC = " << rc;
|
||||
Nebula::log("TST", Log::ERROR, os);
|
||||
|
||||
rc = thepool->update_host(host3);
|
||||
|
||||
os.str("");
|
||||
os << "updated host into DB with RC = " << rc;
|
||||
Nebula::log("TST", Log::ERROR, os);
|
||||
|
||||
bool result;
|
||||
char * error;
|
||||
|
||||
rc = host3->match("numberCores=1 & cpuArchitecture=\"OTRA ARCH\"",result,&error);
|
||||
|
||||
os.str("");
|
||||
if ( rc == 0)
|
||||
{
|
||||
os << "REQ result = " << result;
|
||||
}
|
||||
else
|
||||
{
|
||||
os << "REQ error = " << error;
|
||||
|
||||
free(error);
|
||||
}
|
||||
Nebula::log("TST", Log::ERROR, os);
|
||||
|
||||
int resulti;
|
||||
|
||||
rc = host3->rank("cpuSpeed + numberCores",resulti,&error);
|
||||
|
||||
os.str("");
|
||||
if ( rc == 0)
|
||||
{
|
||||
os << "RANK result = " << resulti;
|
||||
}
|
||||
else
|
||||
{
|
||||
os << "RANK error = " << error;
|
||||
|
||||
free(error);
|
||||
}
|
||||
Nebula::log("TST", Log::ERROR, os);
|
||||
|
||||
host3->unlock();
|
||||
|
||||
host3->lock();
|
||||
|
||||
string host_info_str2("cpuArchitecture=\"OTRA ARCH\"\n");
|
||||
|
||||
rc = host3->update_info(host_info_str2);
|
||||
|
||||
host3->touch();
|
||||
|
||||
rc = thepool->update_host(host3);
|
||||
|
||||
host3->unlock();
|
||||
|
||||
|
||||
host2->lock();
|
||||
|
||||
string host_info_str3("cpuArchitecture=x86_32\nnumberCores=8\ncpuSpeed=2211\ntotalMemory=2046\nfreeMemory=125\nusedMemory=1921\ncpupercentage=50\nnetTX=78516\nnetRX=138612\nnetRX=138612\n");
|
||||
|
||||
rc = host2->update_info(host_info_str3);
|
||||
|
||||
host2->touch();
|
||||
|
||||
rc = thepool->update_host(host2);
|
||||
|
||||
host2->unlock();
|
||||
|
||||
map <int, string> test_discover;
|
||||
|
||||
rc = thepool->discover(&test_discover);
|
||||
|
||||
if(rc!=0)
|
||||
{
|
||||
os.str("");
|
||||
os << "Error discovering hosts.";
|
||||
Nebula::log("TST", Log::ERROR, os);
|
||||
}
|
||||
|
||||
os.str("");
|
||||
os << "Discover size:" << test_discover.size();
|
||||
Nebula::log("TST", Log::ERROR, os);
|
||||
|
||||
map <int, string>::iterator it;
|
||||
|
||||
for(it=test_discover.begin();it!=test_discover.end();it++)
|
||||
{
|
||||
os.str("");
|
||||
os << "IM_MAD:" << it->second << " has to monitor " << it->first;
|
||||
Nebula::log("TST", Log::ERROR, os);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
int main()
|
||||
{
|
||||
pthread_t test_thread;
|
||||
|
||||
pthread_create(&test_thread,0,test,(void *)0);
|
||||
|
||||
try
|
||||
{
|
||||
Nebula& nd = Nebula::instance();
|
||||
nd.start();
|
||||
}
|
||||
catch (exception &e)
|
||||
{
|
||||
cout << e.what() << endl;
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
return 0;
|
||||
}
|
99
share/test/src/im/ImTest.cc
Normal file
99
share/test/src/im/ImTest.cc
Normal file
@ -0,0 +1,99 @@
|
||||
/* -------------------------------------------------------------------------- */
|
||||
/* Copyright 2002-2008, Distributed Systems Architecture Group, Universidad */
|
||||
/* Complutense de Madrid (dsa-research.org) */
|
||||
/* */
|
||||
/* Licensed under the Apache License, Version 2.0 (the "License"); you may */
|
||||
/* not use this file except in compliance with the License. You may obtain */
|
||||
/* a copy of the License at */
|
||||
/* */
|
||||
/* http://www.apache.org/licenses/LICENSE-2.0 */
|
||||
/* */
|
||||
/* Unless required by applicable law or agreed to in writing, software */
|
||||
/* distributed under the License is distributed on an "AS IS" BASIS, */
|
||||
/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. */
|
||||
/* See the License for the specific language governing permissions and */
|
||||
/* limitations under the License. */
|
||||
/* -------------------------------------------------------------------------- */
|
||||
|
||||
#include "VirtualMachine.h"
|
||||
#include "VirtualMachineManagerDriver.h"
|
||||
#include "Nebula.h"
|
||||
|
||||
#include "InformationManagerDriver.h"
|
||||
#include "InformationManager.h"
|
||||
#include "Mad.h"
|
||||
|
||||
|
||||
|
||||
#include <string>
|
||||
#include <iostream>
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <stdexcept>
|
||||
|
||||
#include <signal.h>
|
||||
#include <unistd.h>
|
||||
#include <fcntl.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/stat.h>
|
||||
#include <pthread.h>
|
||||
|
||||
using namespace std;
|
||||
|
||||
|
||||
extern "C" void *test(void *nothing)
|
||||
{
|
||||
sleep(2);
|
||||
|
||||
Nebula& pn = Nebula::instance();
|
||||
|
||||
InformationManager * im = pn.get_im();
|
||||
HostPool * hostp = pn.get_hpool();
|
||||
|
||||
int * oid;
|
||||
int rc;
|
||||
|
||||
sleep(2);
|
||||
|
||||
/* rc = hostp->allocate(oid,"aquila03","im_test","xen_ssh","dummy",true);
|
||||
|
||||
if ( rc != 0 )
|
||||
{
|
||||
Nebula::log("TST",Log::ERROR,"Error allocating host!");
|
||||
return 0;
|
||||
}
|
||||
*/
|
||||
|
||||
im->load_mads();
|
||||
|
||||
sleep(600);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
pthread_attr_t pattr;
|
||||
pthread_t test_thread;
|
||||
|
||||
pthread_attr_init (&pattr);
|
||||
pthread_attr_setdetachstate (&pattr, PTHREAD_CREATE_JOINABLE);
|
||||
|
||||
pthread_create(&test_thread,&pattr,test,(void *)0);
|
||||
|
||||
try
|
||||
{
|
||||
Nebula& nd = Nebula::instance();
|
||||
nd.start();
|
||||
}
|
||||
catch (exception &e)
|
||||
{
|
||||
cout << e.what() << endl;
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
188
share/test/src/mad/MMTest.cc
Normal file
188
share/test/src/mad/MMTest.cc
Normal file
@ -0,0 +1,188 @@
|
||||
#include <iostream>
|
||||
#include <sstream>
|
||||
#include <string>
|
||||
|
||||
#include <unistd.h>
|
||||
|
||||
#include "MadManager.h"
|
||||
|
||||
pthread_cond_t cond = PTHREAD_COND_INITIALIZER;
|
||||
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
|
||||
bool finalized = false;
|
||||
|
||||
class MadEcho : public Mad
|
||||
{
|
||||
public:
|
||||
MadEcho(map<string,string> &attrs):Mad(0,attrs,false)
|
||||
{}
|
||||
;
|
||||
|
||||
~MadEcho()
|
||||
{}
|
||||
;
|
||||
|
||||
void protocol(string& message);
|
||||
|
||||
void recover()
|
||||
{
|
||||
cout<<"Recover Function @ MadEcho\n";
|
||||
};
|
||||
|
||||
void test(const char *a1, const char *a2, const char *a3)
|
||||
{
|
||||
ostringstream buf;
|
||||
|
||||
buf << "TEST " << a1 << " " << a2 << " " << a3 << "\n";
|
||||
|
||||
write(buf);
|
||||
}
|
||||
|
||||
void first(const char *a1)
|
||||
{
|
||||
ostringstream buf;
|
||||
|
||||
buf << "FIRST " << a1 << "\n";
|
||||
|
||||
write(buf);
|
||||
}
|
||||
};
|
||||
|
||||
void MadEcho::protocol(string& message)
|
||||
{
|
||||
stringbuf sbuf(message);
|
||||
iostream sstr(&sbuf);
|
||||
|
||||
string field[5];
|
||||
|
||||
sstr >> field[0] >> ws;
|
||||
|
||||
if ( field[0] == "INIT" )
|
||||
{
|
||||
getline(sstr,field[1]);
|
||||
|
||||
cout << "Init Result: " << field[1] << "\n";
|
||||
}
|
||||
else if ( field[0] == "FINALIZE" )
|
||||
{
|
||||
getline(sstr,field[1]);
|
||||
|
||||
cout << "Finalize Result: " << field[1] << "\n";
|
||||
}
|
||||
else if ( field[0] == "TEST" )
|
||||
{
|
||||
sstr >> field[1] >> field[2] >> field[3] >> ws;
|
||||
|
||||
getline(sstr,field[4]);
|
||||
|
||||
cout << "Test Result: " << field[1] << "\nArg1: " << field[2]
|
||||
<< "\nArg2: " << field[3] << "\nInfo: " << field[4] << "\n";
|
||||
}
|
||||
else if ( field[0] == "FIRST" )
|
||||
{
|
||||
finalized = true;
|
||||
|
||||
sstr >> field[1] >> ws;
|
||||
getline(sstr,field[2]);
|
||||
|
||||
cout << "First Result: " << field[1] << "\nArg1: " << field[2] << "\n";
|
||||
|
||||
pthread_cond_signal(&cond);
|
||||
}
|
||||
}
|
||||
|
||||
class MMadManager : public MadManager
|
||||
{
|
||||
public:
|
||||
MMadManager(vector<const Attribute *>& _mads):MadManager(_mads){};
|
||||
~MMadManager(){};
|
||||
|
||||
void load_mads(int uid){};
|
||||
|
||||
int mstart(){
|
||||
return start();
|
||||
}
|
||||
|
||||
void mstop(){
|
||||
stop();
|
||||
}
|
||||
|
||||
int madd(Mad *mad){
|
||||
return add(mad);
|
||||
}
|
||||
};
|
||||
|
||||
int main()
|
||||
{
|
||||
vector<const Attribute *> _mads;
|
||||
MMadManager *mm;
|
||||
MadEcho * mad_echo;
|
||||
map<string,string> attrs;
|
||||
int rc;
|
||||
|
||||
MadManager::mad_manager_system_init();
|
||||
|
||||
mm = new MMadManager(_mads);
|
||||
|
||||
rc = mm->mstart();
|
||||
|
||||
if ( rc != 0 )
|
||||
{
|
||||
goto error_start;
|
||||
}
|
||||
|
||||
attrs.insert(make_pair("NAME","echo_mad"));
|
||||
attrs.insert(make_pair("EXECUTABLE","./mad_echo.sh"));
|
||||
attrs.insert(make_pair("OWNER","foo"));
|
||||
|
||||
mad_echo = new MadEcho(attrs);
|
||||
/*
|
||||
rc = mad_echo->start();
|
||||
|
||||
if ( rc != 0 )
|
||||
{
|
||||
goto error_start_mad;
|
||||
}
|
||||
*/
|
||||
rc = mm->madd(mad_echo);
|
||||
|
||||
if ( rc != 0 )
|
||||
{
|
||||
goto error_register;
|
||||
}
|
||||
|
||||
mad_echo->test("argument1","argument2","argument3");
|
||||
|
||||
mad_echo->first("filed1");
|
||||
|
||||
pthread_mutex_lock(&mutex);
|
||||
|
||||
while ( finalized == false )
|
||||
{
|
||||
pthread_cond_wait(&cond, &mutex);
|
||||
}
|
||||
|
||||
printf("Mad_Test - OK\n");
|
||||
|
||||
mm->mstop();
|
||||
|
||||
delete mm;
|
||||
|
||||
return 0;
|
||||
|
||||
error_register:
|
||||
cout << "Mad_Test - error register mad\n";
|
||||
mm->mstop();
|
||||
|
||||
delete mm;
|
||||
delete mad_echo;
|
||||
|
||||
return -1;
|
||||
|
||||
error_start:
|
||||
cout << "Mad_Test - error start manager\n";
|
||||
mm->mstop();
|
||||
|
||||
delete mm;
|
||||
|
||||
return -1;
|
||||
}
|
44
share/test/src/mad/mad_echo.sh
Executable file
44
share/test/src/mad/mad_echo.sh
Executable file
@ -0,0 +1,44 @@
|
||||
#!/bin/bash
|
||||
|
||||
# --------------------------------------------------------------------------
|
||||
# Copyright 2002-2006 GridWay Team, Distributed Systems Architecture
|
||||
# Group, Universidad Complutense de Madrid
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
# --------------------------------------------------------------------------
|
||||
|
||||
echo "MAD started" > mad.log
|
||||
|
||||
|
||||
while read COMMAND ARG1 ARG2 ARG3
|
||||
do
|
||||
echo "$COMMAND $ARG1 $ARG2 $ARG3" >> mad.log
|
||||
case $COMMAND in
|
||||
"INIT" | "init")
|
||||
echo "INIT SUCCESS"
|
||||
;;
|
||||
"FINALIZE" | "finalize")
|
||||
echo "FINALIZE SUCCESS"
|
||||
exit 0
|
||||
;;
|
||||
"TEST" | "test")
|
||||
echo "TEST SUCCESS $ARG1 $ARG2 $ARG3"
|
||||
;;
|
||||
"FIRST" | "first")
|
||||
echo "FIRST SUCCESS $ARG1"
|
||||
;;
|
||||
*)
|
||||
echo "$COMMAND - FAILURE Unknown command"
|
||||
;;
|
||||
esac
|
||||
done
|
15
share/test/src/nebula/log.cc
Normal file
15
share/test/src/nebula/log.cc
Normal file
@ -0,0 +1,15 @@
|
||||
#include "Log.h"
|
||||
#include <sstream>
|
||||
|
||||
int main()
|
||||
{
|
||||
Log log("file.log");
|
||||
|
||||
ostringstream message;
|
||||
message << "pepe";
|
||||
|
||||
log.log("module", Log::ERROR, message);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
173
share/test/src/pool/TestSQL.cc
Normal file
173
share/test/src/pool/TestSQL.cc
Normal file
@ -0,0 +1,173 @@
|
||||
#include "PoolSQL.h"
|
||||
#include <climits>
|
||||
#include <iostream>
|
||||
#include <sstream>
|
||||
#include <string>
|
||||
|
||||
class A : public ObjectSQL
|
||||
{
|
||||
public:
|
||||
A(int n,string &t):number(n),text(t){oid=n;};
|
||||
A(int n,const char *t):number(n),text(t){oid=n;};
|
||||
A(int n):number(n){oid=n;};
|
||||
A(){};
|
||||
~A(){};
|
||||
|
||||
int number;
|
||||
string text;
|
||||
|
||||
int insert(sqlite3 *db);
|
||||
int select(sqlite3 *db);
|
||||
int update(sqlite3 *db){return 0;};
|
||||
};
|
||||
|
||||
int A::insert(sqlite3 *db)
|
||||
{
|
||||
const char * sql_cmd;
|
||||
ostringstream buffer;
|
||||
string sql;
|
||||
int rc;
|
||||
|
||||
buffer << "INSERT INTO test (numero,texto) VALUES (" << oid << ",\"" <<
|
||||
text << "\")";
|
||||
|
||||
sql = buffer.str();
|
||||
sql_cmd = sql.c_str();
|
||||
|
||||
rc = sqlite3_exec(db,
|
||||
sql_cmd,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL);
|
||||
|
||||
if ( rc != SQLITE_OK )
|
||||
{
|
||||
cout << "ERROR : "<<sql_cmd<<"\n";
|
||||
}
|
||||
|
||||
return 0;
|
||||
};
|
||||
|
||||
extern "C" int select_cb (
|
||||
void * _this,
|
||||
int num,
|
||||
char ** values,
|
||||
char ** names)
|
||||
{
|
||||
A *aclass;
|
||||
|
||||
aclass = (A *) _this;
|
||||
|
||||
cout << "#" << values[1] << "#\n";
|
||||
|
||||
aclass->text = values[1];
|
||||
|
||||
cout << "-" << aclass->text << "-\n";
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int A::select(sqlite3 *db){
|
||||
|
||||
const char * sql_cmd;
|
||||
ostringstream buffer;
|
||||
string sql;
|
||||
|
||||
buffer << "SELECT * FROM test WHERE numero=" << oid;
|
||||
|
||||
|
||||
sql = buffer.str();
|
||||
sql_cmd = sql.c_str();
|
||||
|
||||
sqlite3_exec(db,
|
||||
sql_cmd,
|
||||
select_cb,
|
||||
this,
|
||||
NULL);
|
||||
|
||||
return 0;
|
||||
};
|
||||
|
||||
class Apool : public PoolSQL
|
||||
{
|
||||
public:
|
||||
Apool(sqlite3 *db):PoolSQL(db,"test"){};
|
||||
~Apool(){};
|
||||
private:
|
||||
ObjectSQL* create(){ return (new A);};
|
||||
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
int main()
|
||||
{
|
||||
sqlite3 * db;
|
||||
|
||||
sqlite3_open("pool.db", &db);
|
||||
|
||||
sqlite3_exec(db,
|
||||
"CREATE TABLE test (numero INTEGER,"
|
||||
"texto TEXT)",
|
||||
NULL,
|
||||
NULL,
|
||||
NULL);
|
||||
|
||||
|
||||
A *a;
|
||||
Apool apool(db);
|
||||
|
||||
|
||||
a = new A(-1,"prueba");
|
||||
|
||||
apool.allocate(a);
|
||||
|
||||
a = new A(4,"otro");
|
||||
|
||||
apool.allocate(a);
|
||||
|
||||
a = new A(8,"otro mas");
|
||||
|
||||
apool.allocate(a);
|
||||
|
||||
A * aobj = static_cast<A *>(apool.get(1,false));
|
||||
|
||||
cout << aobj->text << "\n";
|
||||
|
||||
delete aobj;
|
||||
|
||||
aobj = static_cast<A *>(apool.get(0,false));
|
||||
|
||||
cout << aobj->text << "\n";
|
||||
|
||||
delete aobj;
|
||||
|
||||
sqlite3_close(db);
|
||||
}
|
||||
*/
|
||||
|
||||
/*
|
||||
int main()
|
||||
{
|
||||
sqlite3 * db;
|
||||
string s("HOLA");
|
||||
A test(8,s);
|
||||
A otro(8);
|
||||
|
||||
sqlite3_open("pool.db", &db);
|
||||
|
||||
sqlite3_exec(db,
|
||||
"CREATE TABLE test (numero INTEGER,"
|
||||
"texto TEXT)",
|
||||
NULL,
|
||||
NULL,
|
||||
NULL);
|
||||
|
||||
test.insert(db);
|
||||
|
||||
otro.select(db);
|
||||
|
||||
cout << "texto : " << otro.text;
|
||||
|
||||
sqlite3_close(db);
|
||||
}*/
|
122
share/test/src/template/ATTest.cc
Normal file
122
share/test/src/template/ATTest.cc
Normal file
@ -0,0 +1,122 @@
|
||||
#include "VirtualMachineTemplate.h"
|
||||
#include <iostream>
|
||||
#include <sqlite3.h>
|
||||
#include <sstream>
|
||||
|
||||
|
||||
int main()
|
||||
{
|
||||
VirtualMachineTemplate tmp;
|
||||
Template t;
|
||||
|
||||
char *error;
|
||||
string st("MEMORY=345\nCPU=4\nDISK=[FILE=\"img\",TYPE=cd]\nDISK=[FILE=\"../f\"]\n");
|
||||
|
||||
|
||||
ostringstream os;
|
||||
|
||||
if ((tmp.parse("vm.template",&error) != 0 ) &&
|
||||
(error != 0))
|
||||
{
|
||||
cout << "Error parsing file: "<< error << endl;
|
||||
|
||||
free(error);
|
||||
}
|
||||
|
||||
string mrs;
|
||||
|
||||
tmp.marshall(mrs,':');
|
||||
|
||||
cout << "-" << mrs << "-";
|
||||
|
||||
if ((t.parse(st,&error) != 0 ) &&
|
||||
(error != 0))
|
||||
{
|
||||
cout << "Error parsing string: "<< error << endl;
|
||||
|
||||
free(error);
|
||||
}
|
||||
cout << "TEMPLATE" << endl << t << endl;
|
||||
cout << "------" << endl << endl;
|
||||
cout << "TEMPLATE" << endl << tmp << endl;
|
||||
|
||||
string mm("MEMORY");
|
||||
vector<const Attribute*> values;
|
||||
|
||||
tmp.get(mm,values);
|
||||
|
||||
const SingleAttribute *pmemo;
|
||||
|
||||
pmemo = static_cast<const SingleAttribute *>(values[0]);
|
||||
|
||||
cout << "MEM = " << pmemo->value() << "\n";
|
||||
|
||||
cout << "TEMPLATE--" << endl << t << endl;
|
||||
|
||||
// ---- Init template DB ----
|
||||
/*
|
||||
|
||||
sqlite3 * db;
|
||||
sqlite3_open("template.db", &db);
|
||||
|
||||
sqlite3_exec(db,
|
||||
"CREATE TABLE vm_template (id INTEGER,"
|
||||
"name TEXT, value TEXT)",
|
||||
0,
|
||||
0,
|
||||
0);
|
||||
|
||||
cout << tmp.insert(db) << endl;
|
||||
|
||||
VirtualMachineTemplate rtmp(2);
|
||||
|
||||
rtmp.select(db);
|
||||
|
||||
cout << endl << "FROM DB" << endl << rtmp;
|
||||
|
||||
sqlite3_close(db);
|
||||
|
||||
*/
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
int main()
|
||||
{
|
||||
TemplateAttribute<string> sa1("ejemplo","valor");
|
||||
TemplateAttribute<string> sa2("sample","value");
|
||||
// Attribute * pa;
|
||||
// Attribute * pa2;
|
||||
|
||||
cout << sa1.name() << ":" << sa1.value() << "\n";
|
||||
cout << sa2.name() << ":" << sa2.value() << "\n";
|
||||
|
||||
|
||||
cout << sa2.name() << ":" << sa2.value() << "\n";
|
||||
|
||||
|
||||
|
||||
|
||||
//map<string, Attribute *> mymap;
|
||||
//TemplateAttribute<string> * pta;
|
||||
|
||||
|
||||
|
||||
//pa = new TemplateAttribute<string>("ejemplo","valor");
|
||||
|
||||
//cout << str_attr.name();
|
||||
//cout << pa->name();
|
||||
|
||||
//pta = static_cast<TemplateAttribute<string> *> (pa);
|
||||
|
||||
//cout << pa->name();
|
||||
|
||||
//mymap.insert(make_pair("cadena",pa));
|
||||
|
||||
//delete pa;
|
||||
|
||||
return 0;
|
||||
}
|
||||
*/
|
||||
|
8
share/test/src/template/vm.template
Normal file
8
share/test/src/template/vm.template
Normal file
@ -0,0 +1,8 @@
|
||||
MEMORY = 512
|
||||
Cpu = 1
|
||||
|
||||
DISK = [ ImaGE="/local/VM/disk.img",device="sda",TYPE="hd" ]
|
||||
DISK = [ image="../debian.iso",DEvice="sdb",TYPE="cdrom" ]
|
||||
|
||||
nic = [ MAC="00:01:02", TYPE="bridged", IP="147.3"]
|
||||
|
74
share/test/src/vm/TestVMPool.cc
Normal file
74
share/test/src/vm/TestVMPool.cc
Normal file
@ -0,0 +1,74 @@
|
||||
#include "VirtualMachinePool.h"
|
||||
#include <climits>
|
||||
#include <iostream>
|
||||
#include <sstream>
|
||||
#include <string>
|
||||
|
||||
int main()
|
||||
{
|
||||
sqlite3 * db;
|
||||
|
||||
sqlite3_open("pool.db", &db);
|
||||
|
||||
VirtualMachinePool thepool(db);
|
||||
VirtualMachine * vm;
|
||||
int eid;
|
||||
string st("MEMORY=345\nCPU=4\nDISK=[FILE=\"img\",TYPE=cd]\nDISK=[FILE=\"../f\"]\n");
|
||||
|
||||
thepool.bootstrap();
|
||||
|
||||
thepool.allocate(0,st,&eid);
|
||||
cout << eid << endl;
|
||||
|
||||
thepool.allocate(0,st,&eid);
|
||||
cout << eid << endl;
|
||||
|
||||
thepool.allocate(0,st,&eid);
|
||||
cout << eid << endl;
|
||||
|
||||
vm = static_cast<VirtualMachine *>(thepool.get(444,false));
|
||||
|
||||
if (vm != 0)
|
||||
{
|
||||
cout << *vm;
|
||||
}
|
||||
|
||||
vm = static_cast<VirtualMachine *>(thepool.get(1,true));
|
||||
|
||||
string vmm = "xen";
|
||||
string tm = "gridftp";
|
||||
|
||||
//vm->add_history(2,2,vmm,tm);
|
||||
|
||||
//thepool.update_history(vm);
|
||||
|
||||
if (vm != 0)
|
||||
{
|
||||
cout << *vm << endl;
|
||||
|
||||
vm->unlock();
|
||||
}
|
||||
else
|
||||
{
|
||||
cout << "VM es cero!" << endl;
|
||||
}
|
||||
|
||||
VirtualMachine * vm2 = static_cast<VirtualMachine *>(thepool.get(2,false));
|
||||
|
||||
if (vm2 != 0)
|
||||
{
|
||||
|
||||
cout << *vm2;
|
||||
}
|
||||
|
||||
VirtualMachine * vm3 = static_cast<VirtualMachine *>(thepool.get(3,true));
|
||||
|
||||
if (vm3 != 0)
|
||||
{
|
||||
cout << *vm3;
|
||||
|
||||
vm3->unlock();
|
||||
}
|
||||
|
||||
sqlite3_close(db);
|
||||
}
|
56
share/test/src/vmm/VMManager.cc
Normal file
56
share/test/src/vmm/VMManager.cc
Normal file
@ -0,0 +1,56 @@
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
#include "Nebula.h"
|
||||
#include <sqlite3.h>
|
||||
#include <exception>
|
||||
#include "VirtualMachine.h"
|
||||
#include "VirtualMachineManagerDriver.h"
|
||||
|
||||
extern "C" void *test(void *nothing)
|
||||
{
|
||||
VirtualMachineManager *vm_manager;
|
||||
InformationManager *im_manager;
|
||||
Nebula& ne = Nebula::instance();
|
||||
string s_template;
|
||||
ostringstream os;
|
||||
|
||||
sleep(20);
|
||||
|
||||
Nebula::log("TST", Log::INFO, "Alive!");
|
||||
|
||||
vm_manager = ne.get_vmm();
|
||||
vm_manager->load_mads(0);
|
||||
|
||||
im_manager = ne.get_im();
|
||||
im_manager->load_mads(0);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
pthread_attr_t pattr;
|
||||
pthread_t test_thread;
|
||||
|
||||
pthread_attr_init (&pattr);
|
||||
pthread_attr_setdetachstate (&pattr, PTHREAD_CREATE_JOINABLE);
|
||||
|
||||
pthread_create(&test_thread,&pattr,test,(void *)0);
|
||||
|
||||
try
|
||||
{
|
||||
Nebula& nd = Nebula::instance();
|
||||
nd.start();
|
||||
}
|
||||
catch (exception &e)
|
||||
{
|
||||
cout << e.what() << endl;
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
220
src/client/ruby/client_utilities.rb
Normal file
220
src/client/ruby/client_utilities.rb
Normal file
@ -0,0 +1,220 @@
|
||||
# -------------------------------------------------------------------------- #
|
||||
# Copyright 2002-2008, Distributed Systems Architecture Group, Universidad #
|
||||
# Complutense de Madrid (dsa-research.org) #
|
||||
# #
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may #
|
||||
# not use this file except in compliance with the License. You may obtain #
|
||||
# a copy of the License at #
|
||||
# #
|
||||
# http://www.apache.org/licenses/LICENSE-2.0 #
|
||||
# #
|
||||
# Unless required by applicable law or agreed to in writing, software #
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, #
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. #
|
||||
# See the License for the specific language governing permissions and #
|
||||
# limitations under the License. #
|
||||
#--------------------------------------------------------------------------- #
|
||||
|
||||
#####################
|
||||
# CONSOLE UTILITIES #
|
||||
#####################
|
||||
|
||||
# Sets bold font
|
||||
def scr_bold
|
||||
print "\33[1m"
|
||||
end
|
||||
|
||||
# Sets underline
|
||||
def scr_underline
|
||||
print "\33[4m"
|
||||
end
|
||||
|
||||
# Restore normal font
|
||||
def scr_restore
|
||||
print "\33[0m"
|
||||
end
|
||||
|
||||
# Clears screen
|
||||
def scr_cls
|
||||
print "\33[2J\33[H"
|
||||
end
|
||||
|
||||
# Moves the cursor
|
||||
def scr_move(x,y)
|
||||
print "\33[#{x};#{y}H"
|
||||
end
|
||||
|
||||
|
||||
|
||||
##################################
|
||||
# Class show configurable tables #
|
||||
##################################
|
||||
|
||||
ShowTableExample={
|
||||
:id => {
|
||||
:name => "ID",
|
||||
:size => 4,
|
||||
:proc => lambda {|d,e| d["oid"] }
|
||||
},
|
||||
:name => {
|
||||
:name => "NAME",
|
||||
:size => 8,
|
||||
:proc => lambda {|d,e| d["deploy_id"] }
|
||||
},
|
||||
:stat => {
|
||||
:name => "STAT",
|
||||
:size => 4,
|
||||
:proc => lambda {|d,e| e[:vm].get_state(d) }
|
||||
},
|
||||
:default => [:id, :name, :stat]
|
||||
}
|
||||
|
||||
# Class to print tables
|
||||
class ShowTable
|
||||
attr_accessor :ext, :columns
|
||||
|
||||
# table => definition of the table to print
|
||||
# ext => external variables (Hash), @ext
|
||||
def initialize(table, ext=nil)
|
||||
@table=table
|
||||
@ext=Hash.new
|
||||
@ext=ext if ext.kind_of?(Hash)
|
||||
@columns=@table[:default]
|
||||
end
|
||||
|
||||
# Returns a formated string for header
|
||||
def header_str
|
||||
@columns.collect {|c|
|
||||
if @table[c]
|
||||
#{}"%#{@table[c][:size]}s" % [@table[c][:name]]
|
||||
format_data(c, @table[c][:name])
|
||||
else
|
||||
nil
|
||||
end
|
||||
}.compact.join(' ')
|
||||
end
|
||||
|
||||
# Returns an array with header titles
|
||||
def header_array
|
||||
@columns.collect {|c|
|
||||
if @table[c]
|
||||
@table[c][:name].to_s
|
||||
else
|
||||
""
|
||||
end
|
||||
}.compact
|
||||
end
|
||||
|
||||
def data_str(data, options=nil)
|
||||
# TODO: Use data_array so it can be ordered and/or filtered
|
||||
res_data=data_array(data, options)
|
||||
|
||||
res_data.collect {|d|
|
||||
(0..(@columns.length-1)).collect {|c|
|
||||
dat=d[c]
|
||||
col=@columns[c]
|
||||
|
||||
format_data(col, dat) if @table[col]
|
||||
}.join(' ')
|
||||
}.join("\n")
|
||||
|
||||
#data.collect {|d|
|
||||
# @columns.collect {|c|
|
||||
# format_data(c, @table[c][:proc].call(d, @ext)) if @table[c]
|
||||
# }.join(' ')
|
||||
#}.join("\n")
|
||||
end
|
||||
|
||||
def data_array(data, options=nil)
|
||||
res_data=data.collect {|d|
|
||||
@columns.collect {|c|
|
||||
@table[c][:proc].call(d, @ext).to_s if @table[c]
|
||||
}
|
||||
}
|
||||
|
||||
if options
|
||||
filter_data!(res_data, options[:filter]) if options[:filter]
|
||||
sort_data!(res_data, options[:order]) if options[:order]
|
||||
end
|
||||
|
||||
res_data
|
||||
end
|
||||
|
||||
def format_data(field, data)
|
||||
minus=( @table[field][:left] ? "-" : "" )
|
||||
size=@table[field][:size]
|
||||
"%#{minus}#{size}.#{size}s" % [ data.to_s ]
|
||||
end
|
||||
|
||||
def get_order_column(column)
|
||||
desc=column.match(/^-/)
|
||||
col_name=column.gsub(/^-/, '')
|
||||
index=@columns.index(col_name.to_sym)
|
||||
[index, desc]
|
||||
end
|
||||
|
||||
def sort_data!(data, order)
|
||||
data.sort! {|a,b|
|
||||
# rows are equal by default
|
||||
res=0
|
||||
order.each {|o|
|
||||
# compare
|
||||
pos, dec=get_order_column(o)
|
||||
break if !pos
|
||||
|
||||
r = (b[pos]<=>a[pos])
|
||||
|
||||
# if diferent set res (return value) and exit loop
|
||||
if r!=0
|
||||
# change sign if the order is decreasing
|
||||
r=-r if dec
|
||||
res=r
|
||||
break
|
||||
end
|
||||
}
|
||||
res
|
||||
}
|
||||
end
|
||||
|
||||
def filter_data!(data, filters)
|
||||
filters.each {|key, value|
|
||||
pos=@columns.index(key.downcase.to_sym)
|
||||
if pos
|
||||
data.reject! {|d|
|
||||
if !d[pos]
|
||||
true
|
||||
else
|
||||
!d[pos].downcase.match(value.downcase)
|
||||
end
|
||||
}
|
||||
end
|
||||
}
|
||||
end
|
||||
|
||||
def print_help
|
||||
text=[]
|
||||
@table.each {|option, data|
|
||||
next if option==:default
|
||||
text << "%9s (%2d) => %s" % [option, data[:size], data[:desc]]
|
||||
}
|
||||
text.join("\n")
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
|
||||
################
|
||||
# Miscelaneous #
|
||||
################
|
||||
|
||||
def check_parameters(name, number)
|
||||
if ARGV.length < number
|
||||
print "Command #{name} requires "
|
||||
if number>1
|
||||
puts "#{number} parameters to run."
|
||||
else
|
||||
puts "one parameter to run"
|
||||
end
|
||||
exit -1
|
||||
end
|
||||
end
|
115
src/client/ruby/command_parse.rb
Normal file
115
src/client/ruby/command_parse.rb
Normal file
@ -0,0 +1,115 @@
|
||||
|
||||
require 'optparse'
|
||||
require 'pp'
|
||||
|
||||
class CommandParse
|
||||
|
||||
COMMANDS_HELP=<<-EOT
|
||||
Commands:
|
||||
|
||||
EOT
|
||||
|
||||
USAGE_BANNER=<<-EOT
|
||||
Usage:
|
||||
onevm [<options>] <command> [<parameters>]
|
||||
|
||||
Options:
|
||||
EOT
|
||||
|
||||
ONE_VERSION=<<-EOT
|
||||
OpenNEbula preview release (2008/03/26)
|
||||
Copyright 2002-2008, Distributed Systems Architecture Group, Universidad
|
||||
Complutense de Madrid (dsa-research.org)
|
||||
|
||||
EOT
|
||||
|
||||
def initialize
|
||||
@options=Hash.new
|
||||
|
||||
@cmdparse=OptionParser.new do |opts|
|
||||
opts.banner=text_banner
|
||||
|
||||
opts.on("-l x,y,z", "--list x,y,z", Array,
|
||||
"Selects columns to display with list", "command") do |o|
|
||||
@options[:list]=o.collect {|c| c.to_sym }
|
||||
end
|
||||
|
||||
opts.on("--list-columns", "Information about the columns available",
|
||||
"to display, order or filter") do |o|
|
||||
puts list_options
|
||||
exit
|
||||
end
|
||||
|
||||
opts.on("-o x,y,z", "--order x,y,z", Array,
|
||||
"Order by these columns, column starting",
|
||||
"with - means decreasing order") do |o|
|
||||
@options[:order]=o
|
||||
end
|
||||
|
||||
opts.on("-f x,y,z", "--filter x,y,z", Array,
|
||||
"Filter data. An array is specified", "with column=value pairs.") do |o|
|
||||
@options[:filter]=Hash.new
|
||||
o.each {|i|
|
||||
k,v=i.split('=')
|
||||
@options[:filter][k]=v
|
||||
}
|
||||
end
|
||||
|
||||
opts.on("-d seconds", "--delay seconds", Integer,
|
||||
"Sets the delay in seconds for top", "command") do |o|
|
||||
@options[:delay]=o
|
||||
end
|
||||
|
||||
opts.on_tail("-h", "--help", "Shows this help message") do |o|
|
||||
print_help
|
||||
exit
|
||||
end
|
||||
|
||||
opts.on_tail("-v", "--version",
|
||||
"Shows version and copyright information") do |o|
|
||||
puts text_version
|
||||
exit
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def parse(args)
|
||||
begin
|
||||
@cmdparse.parse!(args)
|
||||
rescue => e
|
||||
puts e.message
|
||||
exit -1
|
||||
end
|
||||
end
|
||||
|
||||
def options
|
||||
@options
|
||||
end
|
||||
|
||||
def print_help
|
||||
puts @cmdparse
|
||||
puts
|
||||
puts text_commands
|
||||
end
|
||||
|
||||
def text_commands
|
||||
COMMANDS_HELP
|
||||
end
|
||||
|
||||
def text_command_name
|
||||
"onevm"
|
||||
end
|
||||
|
||||
def text_banner
|
||||
USAGE_BANNER.gsub("onevm", text_command_name)
|
||||
end
|
||||
|
||||
def text_version
|
||||
ONE_VERSION
|
||||
end
|
||||
|
||||
def list_options
|
||||
"<list options>\n\n"
|
||||
end
|
||||
end
|
||||
|
511
src/client/ruby/one.rb
Normal file
511
src/client/ruby/one.rb
Normal file
@ -0,0 +1,511 @@
|
||||
# -------------------------------------------------------------------------- #
|
||||
# Copyright 2002-2008, Distributed Systems Architecture Group, Universidad #
|
||||
# Complutense de Madrid (dsa-research.org) #
|
||||
# #
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may #
|
||||
# not use this file except in compliance with the License. You may obtain #
|
||||
# a copy of the License at #
|
||||
# #
|
||||
# http://www.apache.org/licenses/LICENSE-2.0 #
|
||||
# #
|
||||
# Unless required by applicable law or agreed to in writing, software #
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, #
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. #
|
||||
# See the License for the specific language governing permissions and #
|
||||
# limitations under the License. #
|
||||
#--------------------------------------------------------------------------- #
|
||||
|
||||
|
||||
begin
|
||||
require 'rubygems'
|
||||
rescue Exception
|
||||
end
|
||||
require 'sqlite3'
|
||||
require 'xmlrpc/client'
|
||||
require 'pp'
|
||||
|
||||
module ONE
|
||||
|
||||
########################
|
||||
# DATABASE DEFINITIONS #
|
||||
########################
|
||||
|
||||
ONE_LOCATION=ENV["ONE_LOCATION"]
|
||||
|
||||
TABLES={
|
||||
"vmpool" => %w{oid aid tid uid priority reschedule last_reschedule
|
||||
last_poll template state lcm_state stime etime deploy_id memory
|
||||
cpu net_tx net_rx},
|
||||
"history" => %w{oid seq hostname vm_dir hid vmmad tmmad stime
|
||||
etime pstime petime rstime retime estime eetime reason},
|
||||
"vm_template" => %w{id name type value},
|
||||
"hostpool" => %w{hid host_name state im_mad vm_mad tm_mad
|
||||
last_mon_time managed},
|
||||
"host_attributes" => %w{id name type value},
|
||||
"hostshares" => %w{hsid endpoint disk_usage mem_usage
|
||||
cpu_usage max_disk max_mem max_cpu running_vms}
|
||||
}
|
||||
|
||||
|
||||
#######################
|
||||
# ENUMS AND CONSTANTS #
|
||||
#######################
|
||||
|
||||
VM_STATE=%w{INIT PENDING HOLD ACTIVE STOPPED SUSPENDED DONE FAILED}
|
||||
|
||||
LCM_STATE=%w{LCM_INIT PROLOG BOOT RUNNING MIGRATE SAVE_STOP SAVE_SUSPEND
|
||||
SAVE_MIGRATE PROLOG_MIGRATE EPILOG_STOP EPILOG SHUTDOWN CANCEL}
|
||||
|
||||
HOST_STATE=%w{INIT MONITORING MONITORED ERROR DISABLED}
|
||||
|
||||
MIGRATE_REASON=%w{NONE ERROR STOP_RESUME PERFORMANCE USER RESCHEDULING
|
||||
KILL}
|
||||
|
||||
|
||||
##################
|
||||
# HELPER CLASSES #
|
||||
##################
|
||||
|
||||
# Server class. This is the one that makes xml-rpc calls.
|
||||
class Server
|
||||
#def initialize(host="localhost", port=60666, path="/RPC2")
|
||||
# @server=XMLRPC::Client.new(host, path, port)
|
||||
#end
|
||||
|
||||
def initialize(endpoint=nil)
|
||||
if endpoint
|
||||
one_endpoint=endpoint
|
||||
elsif ENV["ONE_XMLRPC"]
|
||||
one_endpoint=ENV["ONE_XMLRPC"]
|
||||
else
|
||||
one_endpoint="http://localhost:2633/RPC2"
|
||||
end
|
||||
@server=XMLRPC::Client.new2(one_endpoint)
|
||||
end
|
||||
|
||||
def call(action, *args)
|
||||
begin
|
||||
response=@server.call("one."+action, "sessionID", *args)
|
||||
response<<nil if response.length<2
|
||||
response
|
||||
rescue Exception => e
|
||||
[false, e.message]
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
# This class has the functions to access to the database
|
||||
class Database
|
||||
attr_reader :db
|
||||
|
||||
def initialize(file=ONE_LOCATION+"/var/one.db")
|
||||
@db=SQLite3::Database.new(file)
|
||||
@db.busy_timeout(5000)
|
||||
|
||||
@db.busy_handler do |data, retries|
|
||||
if retries < 3
|
||||
puts "Timeout connecting to the database, retrying. "+
|
||||
"Tries left #{2-retries}"
|
||||
sleep 1
|
||||
1
|
||||
else
|
||||
0
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def select_table_with_names(table, options=nil)
|
||||
options=Hash.new if !options
|
||||
where_clause=( options[:where] ? "where #{options[:where]}" : "" )
|
||||
order_clause=( options[:order] ? "order by #{options[:order]}" : "" )
|
||||
|
||||
sql="select * from #{table} #{where_clause} #{order_clause}"
|
||||
#pp sql
|
||||
begin
|
||||
result=@db.execute(sql)
|
||||
rescue Exception => e
|
||||
result=[false, e.message]
|
||||
return result
|
||||
end
|
||||
|
||||
res=result.collect {|row|
|
||||
r=Hash.new
|
||||
TABLES[table].each_with_index {|value, index|
|
||||
r[value]=row[index]
|
||||
}
|
||||
r
|
||||
}
|
||||
return [true,res]
|
||||
end
|
||||
|
||||
def close
|
||||
@db.close
|
||||
end
|
||||
end
|
||||
|
||||
# Prototype class to call server actions
|
||||
class CommandContainer
|
||||
def initialize(server)
|
||||
@server=server
|
||||
end
|
||||
|
||||
# Magic goes here. This function converts each argument
|
||||
# using description provided by a hash returned by "commands"
|
||||
# method. If the position contains a nil or false the
|
||||
# argument is not converted (right now used for booleans).
|
||||
def call_method(name, *_args)
|
||||
args=[]
|
||||
_args.flatten!
|
||||
_args.each_with_index {|v,i|
|
||||
if self.commands[name][i]
|
||||
args << v.send(self.commands[name][i])
|
||||
else
|
||||
args << v
|
||||
end
|
||||
}
|
||||
|
||||
@server.call(prefix+name.gsub(/_$/, ""), *args)
|
||||
end
|
||||
|
||||
def method_missing(method, *args)
|
||||
if self.commands.has_key?(method.to_s)
|
||||
call_method(method.to_s, args)
|
||||
else
|
||||
raise NoMethodError
|
||||
end
|
||||
end
|
||||
|
||||
# This method should return a hash with action names
|
||||
# and an array with methods to convert the arguments.
|
||||
def commands
|
||||
{}
|
||||
end
|
||||
|
||||
def prefix
|
||||
""
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
###########################
|
||||
# ONE ABSTRACTION CLASSES #
|
||||
###########################
|
||||
|
||||
class VM < CommandContainer
|
||||
|
||||
SHORT_VM_STATES={
|
||||
"INIT" => "init",
|
||||
"PENDING" => "pend",
|
||||
"HOLD" => "hold",
|
||||
"ACTIVE" => "actv",
|
||||
"STOPPED" => "stop",
|
||||
"SUSPENDED" => "susp",
|
||||
"DONE" => "done",
|
||||
"FAILED" => "fail"
|
||||
}
|
||||
|
||||
SHORT_LCM_STATES={
|
||||
"PROLOG" => "prol",
|
||||
"BOOT" => "boot",
|
||||
"RUNNING" => "runn",
|
||||
"MIGRATE" => "migr",
|
||||
"SAVE_STOP" => "save",
|
||||
"SAVE_SUSPEND" => "save",
|
||||
"SAVE_MIGRATE" => "save",
|
||||
"PROLOG_MIGRATE"=> "migr",
|
||||
"EPILOG_STOP" => "epil",
|
||||
"EPILOG" => "epil",
|
||||
"SHUTDOWN" => "shut",
|
||||
"CANCEL" => "shut"
|
||||
}
|
||||
|
||||
SHORT_MIGRATE_REASON={
|
||||
"NONE" => "none",
|
||||
"ERROR" => "erro",
|
||||
"STOP_RESUME" => "stop",
|
||||
"PERFORMANCE" => "perf",
|
||||
"USER" => "user",
|
||||
"RESCHEDULING" => "rsch",
|
||||
"KILL" => "kill"
|
||||
}
|
||||
|
||||
|
||||
def commands
|
||||
{
|
||||
"allocate_" => [:to_s],
|
||||
"deploy" => [:to_i, :to_i],
|
||||
"action" => [:to_s, :to_i],
|
||||
"migrate_" => [:to_i, :to_i, nil],
|
||||
"get_info" => [:to_i]
|
||||
}
|
||||
end
|
||||
|
||||
def prefix
|
||||
"vm"
|
||||
end
|
||||
|
||||
def allocate(*args)
|
||||
begin
|
||||
f=open(args[0], "r")
|
||||
template=f.read
|
||||
f.close
|
||||
rescue
|
||||
return [false, "Can not read template"]
|
||||
end
|
||||
|
||||
self.allocate_(template)
|
||||
end
|
||||
|
||||
def migrate(*args)
|
||||
self.migrate_(args[0], args[1], false)
|
||||
end
|
||||
|
||||
def livemigrate(*args)
|
||||
self.migrate_(args[0], args[1], true)
|
||||
end
|
||||
|
||||
def shutdown(*args)
|
||||
self.action("shutdown", args[0])
|
||||
end
|
||||
|
||||
def hold(*args)
|
||||
self.action("hold", args[0])
|
||||
end
|
||||
|
||||
def release(*args)
|
||||
self.action("release", args[0])
|
||||
end
|
||||
|
||||
def stop(*args)
|
||||
self.action("stop", args[0])
|
||||
end
|
||||
|
||||
def suspend(*args)
|
||||
self.action("suspend", args[0])
|
||||
end
|
||||
|
||||
def resume(*args)
|
||||
self.action("resume", args[0])
|
||||
end
|
||||
|
||||
def delete(*args)
|
||||
self.action("finalize", args[0])
|
||||
end
|
||||
|
||||
def get(options=nil)
|
||||
begin
|
||||
@db=Database.new
|
||||
|
||||
res=@db.select_table_with_names("vmpool", options)
|
||||
|
||||
@db.close
|
||||
|
||||
result=res
|
||||
rescue
|
||||
result=[false, "Error accessing database"]
|
||||
end
|
||||
|
||||
result
|
||||
end
|
||||
|
||||
def get_vms(options=nil)
|
||||
res=self.get(options)
|
||||
if res[0]
|
||||
res[1].each {|row|
|
||||
hostname=self.get_history_host(row["oid"])
|
||||
row["hostname"]=hostname
|
||||
}
|
||||
end
|
||||
res
|
||||
end
|
||||
|
||||
|
||||
###########
|
||||
# HELPERS #
|
||||
###########
|
||||
|
||||
def get_history_host(id, db=nil)
|
||||
if db
|
||||
my_db=db
|
||||
else
|
||||
my_db=Database.new
|
||||
end
|
||||
|
||||
res=my_db.select_table_with_names("history", :where => "oid=#{id}")
|
||||
|
||||
my_db.close if !db
|
||||
|
||||
if res and res[0]
|
||||
return hostname=res[1][-1]["hostname"]
|
||||
else
|
||||
return nil
|
||||
end
|
||||
end
|
||||
|
||||
def get_history(id, db=nil)
|
||||
if db
|
||||
my_db=db
|
||||
else
|
||||
my_db=Database.new
|
||||
end
|
||||
|
||||
res=my_db.select_table_with_names("history", :where => "oid=#{id}")
|
||||
|
||||
my_db.close if !db
|
||||
|
||||
return res
|
||||
end
|
||||
|
||||
def get_template(id, db=nil)
|
||||
if db
|
||||
my_db=db
|
||||
else
|
||||
my_db=Database.new
|
||||
end
|
||||
|
||||
res=my_db.select_table_with_names("vm_template", :where => "id=#{id}")
|
||||
|
||||
my_db.close if !db
|
||||
|
||||
if res && res[0]
|
||||
template=Hash.new
|
||||
res[1].each {|v|
|
||||
name=v["name"]
|
||||
type=v["type"]
|
||||
value=v["value"]
|
||||
if type=="0"
|
||||
template[name]=value
|
||||
else
|
||||
template[name]=Hash.new
|
||||
value.split(',').each {|v2|
|
||||
name2, value2=v2.split("=")
|
||||
template[name][name2]=value2
|
||||
}
|
||||
end
|
||||
}
|
||||
template
|
||||
else
|
||||
nil
|
||||
end
|
||||
end
|
||||
|
||||
def get_state(data)
|
||||
vm_state=ONE::VM_STATE[data["state"].to_i]
|
||||
state_str=SHORT_VM_STATES[vm_state]
|
||||
|
||||
if state_str=="actv"
|
||||
lcm_state=ONE::LCM_STATE[data["lcm_state"].to_i]
|
||||
state_str=SHORT_LCM_STATES[lcm_state]
|
||||
end
|
||||
|
||||
state_str
|
||||
end
|
||||
|
||||
def get_reason(data)
|
||||
reason=ONE::MIGRATE_REASON[data["reason"].to_i]
|
||||
reason_str=SHORT_MIGRATE_REASON[reason]
|
||||
|
||||
reason_str
|
||||
end
|
||||
|
||||
def str_running_time(data)
|
||||
stime=Time.at(data["stime"].to_i)
|
||||
if data["etime"]=="0"
|
||||
etime=Time.now
|
||||
else
|
||||
etime=Time.at(data["etime"].to_i)
|
||||
end
|
||||
dtime=Time.at(etime-stime).getgm
|
||||
|
||||
"%02d %02d:%02d:%02d" % [dtime.yday-1, dtime.hour, dtime.min, dtime.sec]
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
class Host < CommandContainer
|
||||
|
||||
SHORT_HOST_STATES={
|
||||
"INIT" => "on",
|
||||
"MONITORING" => "on",
|
||||
"MONITORED" => "on",
|
||||
"ERROR" => "err",
|
||||
"DISABLED" => "off",
|
||||
}
|
||||
|
||||
def commands
|
||||
{
|
||||
"allocate_" => [:to_s, :to_s, :to_s, :to_s, nil],
|
||||
"info" => [:to_i],
|
||||
"delete" => [:to_i],
|
||||
"enable_" => [:to_i, nil]
|
||||
}
|
||||
end
|
||||
|
||||
def allocate(*args)
|
||||
case args[4]
|
||||
when /^true$/i, 1
|
||||
managed=true
|
||||
when /^false$/i, 0
|
||||
managed=false
|
||||
else
|
||||
puts "Error, use true/false or 0/1 for managed parameter"
|
||||
exit -1
|
||||
end
|
||||
self.allocate_( args[0..3]<<managed )
|
||||
end
|
||||
|
||||
def enable(*args)
|
||||
self.enable_(args[0], true)
|
||||
end
|
||||
|
||||
def disable(*args)
|
||||
self.enable_(args[0], false)
|
||||
end
|
||||
|
||||
def get_generic(table, options=nil)
|
||||
begin
|
||||
@db=Database.new
|
||||
|
||||
res=@db.select_table_with_names(table, options)
|
||||
|
||||
@db.close
|
||||
|
||||
result=res
|
||||
rescue
|
||||
result=[false, "Error accessing database"]
|
||||
end
|
||||
|
||||
result
|
||||
end
|
||||
|
||||
def get(options=nil)
|
||||
get_generic("hostpool", options)
|
||||
end
|
||||
|
||||
def get_host_attributes(hid)
|
||||
get_generic("host_attributes", :where => "id=#{hid}")
|
||||
end
|
||||
|
||||
def get_host_share(hid)
|
||||
get_generic("hostshares", :where => "hsid=#{hid}")
|
||||
end
|
||||
|
||||
def prefix
|
||||
"host"
|
||||
end
|
||||
|
||||
|
||||
###########
|
||||
# HELPERS #
|
||||
###########
|
||||
|
||||
def get_state(data)
|
||||
host_state=ONE::HOST_STATE[data["state"].to_i]
|
||||
state_str=SHORT_HOST_STATES[host_state]
|
||||
|
||||
state_str
|
||||
end
|
||||
end
|
||||
|
||||
end
|
289
src/client/ruby/onehost
Executable file
289
src/client/ruby/onehost
Executable file
@ -0,0 +1,289 @@
|
||||
#!/usr/bin/env ruby
|
||||
|
||||
# -------------------------------------------------------------------------- #
|
||||
# Copyright 2002-2008, Distributed Systems Architecture Group, Universidad #
|
||||
# Complutense de Madrid (dsa-research.org) #
|
||||
# #
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may #
|
||||
# not use this file except in compliance with the License. You may obtain #
|
||||
# a copy of the License at #
|
||||
# #
|
||||
# http://www.apache.org/licenses/LICENSE-2.0 #
|
||||
# #
|
||||
# Unless required by applicable law or agreed to in writing, software #
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, #
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. #
|
||||
# See the License for the specific language governing permissions and #
|
||||
# limitations under the License. #
|
||||
#--------------------------------------------------------------------------- #
|
||||
|
||||
|
||||
|
||||
ONE_LOCATION=ENV["ONE_LOCATION"]
|
||||
|
||||
if !ONE_LOCATION
|
||||
puts "ONE_LOCATION not set"
|
||||
exit -1
|
||||
end
|
||||
|
||||
$: << ONE_LOCATION+"/lib/ruby"
|
||||
|
||||
require 'one'
|
||||
require 'client_utilities'
|
||||
require 'command_parse'
|
||||
|
||||
ShowTableHost={
|
||||
:hid => {
|
||||
:name => "HID",
|
||||
:desc => "ONE identifier for host",
|
||||
:size => 4,
|
||||
:proc => lambda {|d,e| d["hid"] }
|
||||
},
|
||||
:name => {
|
||||
:name => "NAME",
|
||||
:desc => "Hostname",
|
||||
:size => 25,
|
||||
:left => true,
|
||||
:proc => lambda {|d,e| d["host_name"] }
|
||||
},
|
||||
:rvm => {
|
||||
:name => "RVM",
|
||||
:desc => "Number of virtual machines running",
|
||||
:size => 3,
|
||||
:proc => lambda {|d,e| d["hs_running_vms"] }
|
||||
},
|
||||
:tcpu => {
|
||||
:name => "TCPU",
|
||||
:desc => "Total cpu percentage",
|
||||
:size => 6,
|
||||
:proc => lambda {|d,e| d["TOTALCPU"] }
|
||||
},
|
||||
:fcpu => {
|
||||
:name => "FCPU",
|
||||
:desc => "Free cpu percentage",
|
||||
:size => 6,
|
||||
:proc => lambda {|d,e| d["TOTALCPU"].to_i-d["USEDCPU"].to_i }
|
||||
},
|
||||
:acpu => {
|
||||
:name => "ACPU",
|
||||
:desc => "Available cpu percentage (not reserved by VMs)",
|
||||
:size => 6,
|
||||
:proc => lambda {|d,e|
|
||||
max_cpu=d["hs_max_cpu"].to_i
|
||||
max_cpu=100 if max_cpu==0
|
||||
max_cpu-d["hs_cpu_usage"].to_i
|
||||
}
|
||||
},
|
||||
:tmem => {
|
||||
:name => "TMEM",
|
||||
:desc => "Total memory",
|
||||
:size => 7,
|
||||
:proc => lambda {|d,e| d["TOTALMEMORY"] }
|
||||
},
|
||||
:fmem => {
|
||||
:name => "FMEM",
|
||||
:desc => "Free memory",
|
||||
:size => 7,
|
||||
:proc => lambda {|d,e| d["FREEMEMORY"] }
|
||||
},
|
||||
:stat => {
|
||||
:name => "STAT",
|
||||
:desc => "Host status",
|
||||
:size => 4,
|
||||
:proc => lambda {|d,e| e[:host].get_state(d) }
|
||||
},
|
||||
|
||||
|
||||
:default => [:hid, :name, :rvm, :tcpu, :fcpu, :acpu, :tmem, :fmem, :stat]
|
||||
}
|
||||
|
||||
class HostShow
|
||||
def initialize(host)
|
||||
@host=host
|
||||
@table=ShowTable.new(ShowTableHost, :host => @host)
|
||||
end
|
||||
|
||||
def close
|
||||
end
|
||||
|
||||
def header_host_small
|
||||
scr_bold
|
||||
scr_underline
|
||||
puts @table.header_str
|
||||
scr_restore
|
||||
end
|
||||
|
||||
def list_short(options=nil)
|
||||
res=@host.get
|
||||
if options
|
||||
@table.columns=options[:columns] if options[:columns]
|
||||
end
|
||||
|
||||
if res[0]
|
||||
result=res
|
||||
header_host_small
|
||||
res[1].each {|row|
|
||||
res2=@host.get_host_attributes(row["hid"])
|
||||
if res2[0]
|
||||
attributes=res2[1]
|
||||
attributes.each {|a|
|
||||
if %w{USEDCPU TOTALMEMORY FREEMEMORY TOTALCPU}.include? a["name"]
|
||||
row[a["name"]]=a["value"]
|
||||
end
|
||||
}
|
||||
end
|
||||
|
||||
res2=@host.get_host_share(row["hid"])
|
||||
if res2[0]
|
||||
attributes=res2[1]
|
||||
attributes.each {|a|
|
||||
row["hs_running_vms"]=a["running_vms"]
|
||||
row["hs_max_mem"]=a["max_mem"]
|
||||
row["hs_max_cpu"]=a["max_cpu"]
|
||||
row["hs_mem_usage"]=a["mem_usage"]
|
||||
row["hs_cpu_usage"]=a["cpu_usage"]
|
||||
row["hs_running_vms"]=a["running_vms"]
|
||||
}
|
||||
end
|
||||
}
|
||||
puts @table.data_str(result[1], options)
|
||||
result
|
||||
else
|
||||
result=res
|
||||
end
|
||||
end
|
||||
|
||||
def top(options=nil)
|
||||
delay=1
|
||||
delay=options[:delay] if options && options[:delay]
|
||||
|
||||
result=nil
|
||||
|
||||
begin
|
||||
while true
|
||||
scr_cls
|
||||
scr_move(0,0)
|
||||
result=list_short(options)
|
||||
sleep delay
|
||||
end
|
||||
rescue Exception
|
||||
end
|
||||
result
|
||||
end
|
||||
end
|
||||
|
||||
class OnehostParse < CommandParse
|
||||
|
||||
COMMANDS_HELP=<<-EOT
|
||||
Commands:
|
||||
|
||||
* add (Adds a new machine to the pool)
|
||||
onehost add <hostname> <im_mad> <vmm_mad>
|
||||
|
||||
* show (Gets info from a host)
|
||||
onehost show <host_id>
|
||||
|
||||
* delete (Removes a machine from the pool)
|
||||
onehost delete <host_id>
|
||||
|
||||
* list (Lists machines in the pool)
|
||||
onehost list
|
||||
|
||||
* enable (Enables host)
|
||||
onehost enable <host_id>
|
||||
|
||||
* disable (Disables host)
|
||||
onehost disable <host_id>
|
||||
|
||||
* top (Lists hosts continuously)
|
||||
onehost top
|
||||
|
||||
EOT
|
||||
|
||||
def text_commands
|
||||
COMMANDS_HELP
|
||||
end
|
||||
|
||||
def text_command_name
|
||||
"onehost"
|
||||
end
|
||||
|
||||
def list_options
|
||||
table=ShowTable.new(ShowTableHost)
|
||||
table.print_help
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
server=ONE::Server.new
|
||||
host=ONE::Host.new(server)
|
||||
|
||||
onehost_opts=OnehostParse.new
|
||||
onehost_opts.parse(ARGV)
|
||||
|
||||
result=[false, "Unknown error"]
|
||||
|
||||
command=ARGV.shift
|
||||
|
||||
case command
|
||||
when "add"
|
||||
check_parameters("add", 3)
|
||||
result=host.allocate(*[ARGV[0], ARGV[1], ARGV[2], "tm_mad", "true"])
|
||||
|
||||
when "show"
|
||||
check_parameters("show", 1)
|
||||
result=host.info(*ARGV)
|
||||
if result[0]
|
||||
puts result[1]
|
||||
else
|
||||
puts "Error: "+result[1]
|
||||
exit -1
|
||||
end
|
||||
|
||||
when "delete"
|
||||
check_parameters("delete", 1)
|
||||
result=host.delete(*ARGV)
|
||||
if result[0]
|
||||
puts "Host deleted"
|
||||
exit 0
|
||||
end
|
||||
|
||||
when "list"
|
||||
hostlist=HostShow.new(host)
|
||||
ops=onehost_opts.options
|
||||
ops[:columns]=ops[:list] if ops[:list]
|
||||
result=hostlist.list_short(ops)
|
||||
hostlist.close
|
||||
|
||||
when "top"
|
||||
hostlist=HostShow.new(host)
|
||||
ops=onehost_opts.options
|
||||
ops[:columns]=ops[:list] if ops[:list]
|
||||
result=hostlist.top(ops)
|
||||
hostlist.close
|
||||
|
||||
when "enable"
|
||||
check_parameters("enable", 1)
|
||||
result=host.enable(*ARGV)
|
||||
if result[0]
|
||||
puts "Host enabled"
|
||||
exit 0
|
||||
end
|
||||
|
||||
when "disable"
|
||||
check_parameters("disable", 1)
|
||||
result=host.disable(*ARGV)
|
||||
if result[0]
|
||||
puts "Host disabled"
|
||||
exit 0
|
||||
end
|
||||
|
||||
else
|
||||
onehost_opts.print_help
|
||||
exit -1
|
||||
end
|
||||
|
||||
if !result[0]
|
||||
puts "Error: " + result[1].to_s
|
||||
exit -1
|
||||
end
|
509
src/client/ruby/onevm
Executable file
509
src/client/ruby/onevm
Executable file
@ -0,0 +1,509 @@
|
||||
#!/usr/bin/env ruby
|
||||
|
||||
# -------------------------------------------------------------------------- #
|
||||
# Copyright 2002-2008, Distributed Systems Architecture Group, Universidad #
|
||||
# Complutense de Madrid (dsa-research.org) #
|
||||
# #
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may #
|
||||
# not use this file except in compliance with the License. You may obtain #
|
||||
# a copy of the License at #
|
||||
# #
|
||||
# http://www.apache.org/licenses/LICENSE-2.0 #
|
||||
# #
|
||||
# Unless required by applicable law or agreed to in writing, software #
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, #
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. #
|
||||
# See the License for the specific language governing permissions and #
|
||||
# limitations under the License. #
|
||||
#--------------------------------------------------------------------------- #
|
||||
|
||||
|
||||
ONE_LOCATION=ENV["ONE_LOCATION"]
|
||||
|
||||
if !ONE_LOCATION
|
||||
puts "ONE_LOCATION not set"
|
||||
exit -1
|
||||
end
|
||||
|
||||
$: << ONE_LOCATION+"/lib/ruby"
|
||||
|
||||
require 'one'
|
||||
require 'client_utilities'
|
||||
require 'command_parse'
|
||||
|
||||
ShowTableVM={
|
||||
:id => {
|
||||
:name => "ID",
|
||||
:desc => "ONE identifier for the VM",
|
||||
:size => 4,
|
||||
:proc => lambda {|d,e| d["oid"] }
|
||||
},
|
||||
:name => {
|
||||
:name => "NAME",
|
||||
:desc => "Name of the domain",
|
||||
:size => 8,
|
||||
:proc => lambda {|d,e|
|
||||
tid=d["template"]
|
||||
template=e[:vm].get_template(tid)
|
||||
template["NAME"]
|
||||
}
|
||||
},
|
||||
:stat => {
|
||||
:name => "STAT",
|
||||
:desc => "Actual status of the VM",
|
||||
:size => 4,
|
||||
:proc => lambda {|d,e| e[:vm].get_state(d) }
|
||||
},
|
||||
:cpu => {
|
||||
:name => "CPU",
|
||||
:desc => "CPU percentage used by the VM",
|
||||
:size => 3,
|
||||
:proc => lambda {|d,e| d["cpu"] }
|
||||
},
|
||||
:mem => {
|
||||
:name => "MEM",
|
||||
:desc => "Memory used by the VM",
|
||||
:size => 7,
|
||||
:proc => lambda {|d,e| d["memory"] }
|
||||
},
|
||||
:hostname => {
|
||||
:name => "HOSTNAME",
|
||||
:desc => "Machine where the VM is running",
|
||||
:size => 15,
|
||||
:proc => lambda {|d,e| e[:vm].get_history_host(d["oid"]) }
|
||||
},
|
||||
:time => {
|
||||
:name => "TIME",
|
||||
:desc => "Time since the VM was submitted",
|
||||
:size => 11,
|
||||
:proc => lambda {|d,e| e[:vm].str_running_time(d) }
|
||||
},
|
||||
|
||||
:default => [:id, :name, :stat, :cpu, :mem, :hostname, :time]
|
||||
}
|
||||
|
||||
ShowTableHistory={
|
||||
:id => {
|
||||
:name => "ID",
|
||||
:desc => "ONE identifier for the VM",
|
||||
:size => 4,
|
||||
:proc => lambda {|d,e| d["oid"] }
|
||||
},
|
||||
:seq => {
|
||||
:name => "SEQ",
|
||||
:desc => "Sequence number",
|
||||
:size => 3,
|
||||
:proc => lambda {|d,e| d["seq"] }
|
||||
},
|
||||
:hostname => {
|
||||
:name => "HOSTNAME",
|
||||
:desc => "Name of the host where the VM was submited",
|
||||
:size => 15,
|
||||
:proc => lambda {|d,e| d["hostname"] }
|
||||
},
|
||||
:stime => {
|
||||
:name => "STIME",
|
||||
:desc => "Start time",
|
||||
:size => 14,
|
||||
:proc => lambda {|d,e|
|
||||
t=Time.at(d["stime"].to_i)
|
||||
t.strftime("%m/%d %H:%M:%S")
|
||||
}
|
||||
},
|
||||
:etime => {
|
||||
:name => "ETIME",
|
||||
:desc => "End time",
|
||||
:size => 14,
|
||||
:proc => lambda {|d,e|
|
||||
if d["etime"].to_i==0
|
||||
"--"
|
||||
else
|
||||
t=Time.at(d["etime"].to_i)
|
||||
t.strftime("%m/%d %H:%M:%S")
|
||||
end
|
||||
}
|
||||
},
|
||||
:time => {
|
||||
:name => "TIME",
|
||||
:desc => "Total time",
|
||||
:size => 11,
|
||||
:proc => lambda {|d,e| e[:vm].str_running_time(d) }
|
||||
},
|
||||
:reason => {
|
||||
:name => "REASON",
|
||||
:desc => "Reason for state change",
|
||||
:size => "6",
|
||||
:proc => lambda {|d,e| e[:vm].get_reason(d) }
|
||||
},
|
||||
|
||||
:default => [:id, :seq, :hostname, :stime, :etime, :time, :reason]
|
||||
}
|
||||
|
||||
class VmShow
|
||||
|
||||
def initialize(vm)
|
||||
@vm=vm
|
||||
@table=ShowTable.new(ShowTableVM, :vm => @vm)
|
||||
@table_history=ShowTable.new(ShowTableHistory, :vm => @vm)
|
||||
end
|
||||
|
||||
def close
|
||||
end
|
||||
|
||||
def header_vm_small
|
||||
scr_bold
|
||||
scr_underline
|
||||
puts @table.header_str
|
||||
scr_restore
|
||||
end
|
||||
|
||||
def header_history_small
|
||||
scr_bold
|
||||
scr_underline
|
||||
puts @table_history.header_str
|
||||
scr_restore
|
||||
end
|
||||
|
||||
def print_vm_long(data)
|
||||
str="%-10s: %-20s"
|
||||
puts str % ["ID", data["oid"]]
|
||||
puts str % ["NAME", data["deploy_id"]]
|
||||
puts str % ["STATE", ONE::VM_STATE[data["state"].to_i]]
|
||||
puts str % ["LCM_STATE", ONE::LCM_STATE[data["lcm_state"].to_i]]
|
||||
puts str % ["MEMORY", data["memory"]]
|
||||
puts str % ["CPU", data["cpu"]]
|
||||
puts
|
||||
puts "Template"
|
||||
str=" %-20s: %-20s"
|
||||
data.each {|key,value|
|
||||
puts str % [key, value] if !%w{oid deploy_id state lcm_state memory cpu template}.include? key
|
||||
}
|
||||
end
|
||||
|
||||
def list_short(options=nil)
|
||||
res=@vm.get_vms(:where => "state <> 6")
|
||||
if options
|
||||
@table.columns=options[:columns] if options[:columns]
|
||||
end
|
||||
|
||||
if res[0]
|
||||
result=[true, ""]
|
||||
header_vm_small
|
||||
|
||||
if options
|
||||
puts @table.data_str(res[1], options)
|
||||
else
|
||||
puts @table.data_str(res[1])
|
||||
end
|
||||
|
||||
result
|
||||
else
|
||||
result=res
|
||||
end
|
||||
end
|
||||
|
||||
def list_long(id)
|
||||
res=@vm.get(:where => "oid="+id)
|
||||
|
||||
if res && res[0] && res[1] && res[1].length>0
|
||||
result=[true, ""]
|
||||
res[1].each {|row|
|
||||
print_vm_long(row)
|
||||
}
|
||||
result
|
||||
else
|
||||
if res[0]
|
||||
[false, "VM not found"]
|
||||
else
|
||||
result=res
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def top(options=nil)
|
||||
delay=1
|
||||
delay=options[:delay] if options && options[:delay]
|
||||
|
||||
result=nil
|
||||
|
||||
begin
|
||||
while true
|
||||
scr_cls
|
||||
scr_move(0,0)
|
||||
result=list_short(options)
|
||||
sleep delay
|
||||
end
|
||||
rescue Exception
|
||||
end
|
||||
result
|
||||
end
|
||||
|
||||
def list_vm_history(id, options=nil)
|
||||
res=@vm.get_history(id)
|
||||
if options
|
||||
@table_history.columns=options[:columns] if options[:columns]
|
||||
end
|
||||
|
||||
if res[0]
|
||||
result=[true, ""]
|
||||
header_history_small
|
||||
|
||||
if options
|
||||
puts @table_history.data_str(res, options)
|
||||
else
|
||||
puts @table_history.data_str(res)
|
||||
end
|
||||
|
||||
result
|
||||
else
|
||||
result=res
|
||||
end
|
||||
end
|
||||
|
||||
def list_vm_history_array(ids, options=nil)
|
||||
res=[false, "No VMs found"]
|
||||
ids.each {|id|
|
||||
puts "History for VM #{id}"
|
||||
puts
|
||||
res=list_vm_history(id, options)
|
||||
puts
|
||||
}
|
||||
res
|
||||
end
|
||||
|
||||
def list_vm_history_all(options=nil)
|
||||
res=@vm.get
|
||||
res[1].each {|vm|
|
||||
list_vm_history_array(vm["oid"], options)
|
||||
}
|
||||
res
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
##########################
|
||||
## COMMAND LINE PARSING ##
|
||||
##########################
|
||||
|
||||
class OnevmParse < CommandParse
|
||||
|
||||
COMMANDS_HELP=<<-EOT
|
||||
Commands:
|
||||
|
||||
* submit (Submits a new virtual machine, adding it to the ONE VM pool)
|
||||
onevm submit <template>
|
||||
|
||||
template is a file name where the VM description is located
|
||||
|
||||
* deploy (Start a previously submitted VM in an specific host)
|
||||
onevm deploy <vm_id> <host_id>
|
||||
|
||||
* shutdown (Shutdown an already deployed VM)
|
||||
onevm shutdown <vm_id>
|
||||
|
||||
* livemigrate (Migrates a running VM to another host without downtime)
|
||||
onevm livemigrate <vm_id> <host_id>
|
||||
|
||||
* migrate (Saves a running VM and starts it again in the specified host)
|
||||
onevm migrate <vm_id> <host_id>
|
||||
|
||||
* suspend (Saves a running VM)
|
||||
onevm suspend <vm_id>
|
||||
|
||||
* resume (Resumes the execution of a saved VM)
|
||||
onevm resume <vm_id>
|
||||
|
||||
* delete (Deletes a VM from the pool and DB)
|
||||
onevm delete <vm_id>
|
||||
|
||||
* list (Shows VMs in the pool)
|
||||
onevm list
|
||||
|
||||
* show (Gets information about a specific VM)
|
||||
onevm show <vm_id>
|
||||
|
||||
* top (Lists VMs continuously)
|
||||
onevm top
|
||||
|
||||
* history (Gets history from VMs)
|
||||
onevm history [<vm_id> <vm_id> ...]
|
||||
|
||||
if no vm_id is provided it will list history for all known VMs
|
||||
|
||||
EOT
|
||||
|
||||
def text_commands
|
||||
COMMANDS_HELP
|
||||
end
|
||||
|
||||
def text_command_name
|
||||
"onevm"
|
||||
end
|
||||
|
||||
def list_options
|
||||
table=ShowTable.new(ShowTableVM)
|
||||
table.print_help
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
|
||||
server=ONE::Server.new
|
||||
vm=ONE::VM.new(server)
|
||||
|
||||
onevm_opts=OnevmParse.new
|
||||
onevm_opts.parse(ARGV)
|
||||
|
||||
result=[false, "Unknown error"]
|
||||
|
||||
command=ARGV.shift
|
||||
|
||||
case command
|
||||
when "submit"
|
||||
check_parameters("submit", 1)
|
||||
result=vm.allocate(*ARGV)
|
||||
if result[0]
|
||||
puts "ID: " + result[1].to_s
|
||||
exit 0
|
||||
end
|
||||
|
||||
when "deploy"
|
||||
check_parameters("deploy", 2)
|
||||
result=vm.deploy(*ARGV)
|
||||
if result[0]
|
||||
puts "Deploying VM"
|
||||
exit 0
|
||||
end
|
||||
|
||||
when "shutdown"
|
||||
check_parameters("shutdown", 1)
|
||||
result=vm.shutdown(*ARGV)
|
||||
if result[0]
|
||||
puts "Shutting down VM"
|
||||
exit 0
|
||||
end
|
||||
|
||||
when "livemigrate"
|
||||
check_parameters("livemigrate", 2)
|
||||
result=vm.livemigrate(*ARGV)
|
||||
if result[0]
|
||||
puts "Migrating VM"
|
||||
exit 0
|
||||
end
|
||||
|
||||
when "migrate"
|
||||
check_parameters("migrate", 2)
|
||||
result=vm.migrate(*ARGV)
|
||||
if result[0]
|
||||
puts "Migrating VM"
|
||||
exit 0
|
||||
end
|
||||
|
||||
when "suspend"
|
||||
check_parameters("suspend", 1)
|
||||
result=vm.suspend(*ARGV)
|
||||
if result[0]
|
||||
puts "Suspending VM"
|
||||
exit 0
|
||||
end
|
||||
|
||||
when "resume"
|
||||
check_parameters("resume", 1)
|
||||
result=vm.resume(*ARGV)
|
||||
if result[0]
|
||||
puts "Resuming VM"
|
||||
exit 0
|
||||
end
|
||||
|
||||
when "list"
|
||||
vmlist=VmShow.new(vm)
|
||||
ops=onevm_opts.options
|
||||
ops[:columns]=ops[:list] if ops[:list]
|
||||
result=vmlist.list_short(ops)
|
||||
vmlist.close
|
||||
|
||||
when "top"
|
||||
vmlist=VmShow.new(vm)
|
||||
ops=onevm_opts.options
|
||||
ops[:columns]=ops[:list] if ops[:list]
|
||||
result=vmlist.top(ops)
|
||||
vmlist.close
|
||||
|
||||
when "show_db"
|
||||
check_parameters("show", 1)
|
||||
vmlist=VmShow.new(vm)
|
||||
|
||||
if ARGV[0]
|
||||
result=vmlist.list_long(ARGV[0])
|
||||
vmlist.close
|
||||
else
|
||||
result=[false, "You must provide a VM id."]
|
||||
end
|
||||
|
||||
when "history"
|
||||
vmlist=VmShow.new(vm)
|
||||
ops=onevm_opts.options
|
||||
ops[:columns]=ops[:list] if ops[:list]
|
||||
if ARGV[0]
|
||||
result=vmlist.list_vm_history_array(ARGV)
|
||||
else
|
||||
result=vmlist.list_vm_history_all(ops)
|
||||
end
|
||||
vmlist.close
|
||||
|
||||
when "delete"
|
||||
check_parameters("delete", 1)
|
||||
result=vm.delete(*ARGV)
|
||||
if result[0]
|
||||
puts "VM correctly deleted"
|
||||
exit 0
|
||||
end
|
||||
|
||||
when "show"
|
||||
check_parameters("get_info", 1)
|
||||
res = vm.get_info(ARGV[0])
|
||||
if res[0]
|
||||
res[1].gsub!(/^\n/, '')
|
||||
(normal, template)=res[1].split("Template")
|
||||
|
||||
str="%-15s: %-20s"
|
||||
normal.each{|line|
|
||||
(key, value)=line.split(":").collect{|v| v.strip }
|
||||
case key
|
||||
when "STATE"
|
||||
value = ONE::VM_STATE[value.to_i]
|
||||
when "LCM STATE"
|
||||
value = ONE::LCM_STATE[value.to_i]
|
||||
when "START TIME","STOP TIME"
|
||||
value=Time.at(value.to_i).strftime("%m/%d %H:%M:%S")
|
||||
end
|
||||
puts str % [key, value]
|
||||
}
|
||||
|
||||
puts
|
||||
puts "....: Template :...."
|
||||
|
||||
str=" %-16s: %-20s"
|
||||
|
||||
template.each{|line|
|
||||
next if line=="\n"
|
||||
(key, value)=line.split("^").collect{|v| v.strip }
|
||||
puts str % [key, value]
|
||||
}
|
||||
|
||||
|
||||
exit 0
|
||||
end
|
||||
|
||||
else
|
||||
onevm_opts.print_help
|
||||
exit -1
|
||||
end
|
||||
|
||||
|
||||
|
||||
if !result[0]
|
||||
puts "Error: " + result[1].to_s
|
||||
exit -1
|
||||
end
|
||||
|
45
src/client/ruby/test.rb
Normal file
45
src/client/ruby/test.rb
Normal file
@ -0,0 +1,45 @@
|
||||
# -------------------------------------------------------------------------- #
|
||||
# Copyright 2002-2008, Distributed Systems Architecture Group, Universidad #
|
||||
# Complutense de Madrid (dsa-research.org) #
|
||||
# #
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may #
|
||||
# not use this file except in compliance with the License. You may obtain #
|
||||
# a copy of the License at #
|
||||
# #
|
||||
# http://www.apache.org/licenses/LICENSE-2.0 #
|
||||
# #
|
||||
# Unless required by applicable law or agreed to in writing, software #
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, #
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. #
|
||||
# See the License for the specific language governing permissions and #
|
||||
# limitations under the License. #
|
||||
#--------------------------------------------------------------------------- #
|
||||
|
||||
|
||||
require 'one'
|
||||
require 'pp'
|
||||
|
||||
template='
|
||||
DISK=[image="/local/xen/domains/xen-etch/disk.img",dev="sda1",mode=w]
|
||||
DISK=[image="/local/xen/domains/xen-etch/swap.img",dev="sda2",mode=w]
|
||||
KERNEL=/boot/vmlinuz-2.6.18-4-xen-amd64
|
||||
RAMDISK=/boot/initrd.img-2.6.18-4-xen-amd64
|
||||
MEMORY=64
|
||||
CPU=1
|
||||
'
|
||||
|
||||
server=ONE::Server.new("aquila")
|
||||
vm=ONE::VM.new(server)
|
||||
host=ONE::Host.new(server)
|
||||
|
||||
#pp vm.allocate(template)
|
||||
|
||||
|
||||
#db=ONE::Database.new
|
||||
|
||||
#pp db.select_table_with_names("vmpool")
|
||||
|
||||
pp h=host.info(0)
|
||||
|
||||
puts h[1]
|
||||
|
127
src/common/ActionManager.cc
Normal file
127
src/common/ActionManager.cc
Normal file
@ -0,0 +1,127 @@
|
||||
/* -------------------------------------------------------------------------- */
|
||||
/* Copyright 2002-2008, Distributed Systems Architecture Group, Universidad */
|
||||
/* Complutense de Madrid (dsa-research.org) */
|
||||
/* */
|
||||
/* Licensed under the Apache License, Version 2.0 (the "License"); you may */
|
||||
/* not use this file except in compliance with the License. You may obtain */
|
||||
/* a copy of the License at */
|
||||
/* */
|
||||
/* http://www.apache.org/licenses/LICENSE-2.0 */
|
||||
/* */
|
||||
/* Unless required by applicable law or agreed to in writing, software */
|
||||
/* distributed under the License is distributed on an "AS IS" BASIS, */
|
||||
/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. */
|
||||
/* See the License for the specific language governing permissions and */
|
||||
/* limitations under the License. */
|
||||
/* -------------------------------------------------------------------------- */
|
||||
|
||||
#include "ActionManager.h"
|
||||
#include <ctime>
|
||||
#include <cerrno>
|
||||
|
||||
/* ************************************************************************** */
|
||||
/* NeActionManager constants */
|
||||
/* ************************************************************************** */
|
||||
|
||||
const string ActionListener::ACTION_TIMER = string("ACTION_TIMER");
|
||||
const string ActionListener::ACTION_FINALIZE = string("ACTION_FINALIZE");
|
||||
|
||||
/* ************************************************************************** */
|
||||
/* NeActionManager constructor & destructor */
|
||||
/* ************************************************************************** */
|
||||
|
||||
ActionManager::ActionManager():
|
||||
actions(),
|
||||
listener(0)
|
||||
{
|
||||
pthread_mutex_init(&mutex,0);
|
||||
|
||||
pthread_cond_init(&cond,0);
|
||||
}
|
||||
|
||||
/* -------------------------------------------------------------------------- */
|
||||
|
||||
ActionManager::~ActionManager()
|
||||
{
|
||||
unlock();
|
||||
|
||||
pthread_mutex_destroy(&mutex);
|
||||
|
||||
pthread_cond_destroy(&cond);
|
||||
}
|
||||
|
||||
/* ************************************************************************** */
|
||||
/* NeActionManager public interface */
|
||||
/* ************************************************************************** */
|
||||
|
||||
void ActionManager::trigger(
|
||||
const string &action,
|
||||
void * arg)
|
||||
{
|
||||
ActionRequest request(action,arg);
|
||||
|
||||
lock();
|
||||
|
||||
actions.push(request);
|
||||
|
||||
pthread_cond_signal(&cond);
|
||||
|
||||
unlock();
|
||||
}
|
||||
|
||||
/* -------------------------------------------------------------------------- */
|
||||
/* -------------------------------------------------------------------------- */
|
||||
|
||||
void ActionManager::loop(
|
||||
time_t timer,
|
||||
void * timer_args)
|
||||
{
|
||||
struct timespec timeout;
|
||||
int finalize = 0;
|
||||
int rc;
|
||||
|
||||
ActionRequest action;
|
||||
ActionRequest trequest(ActionListener::ACTION_TIMER,timer_args);
|
||||
|
||||
timeout.tv_sec = time(NULL) + timer;
|
||||
timeout.tv_nsec = 0;
|
||||
|
||||
//Action Loop, end when a finalize action is triggered to this manager
|
||||
while (finalize == 0)
|
||||
{
|
||||
lock();
|
||||
|
||||
while ( actions.empty() == true )
|
||||
{
|
||||
if ( timer != 0 )
|
||||
{
|
||||
rc = pthread_cond_timedwait(&cond,&mutex, &timeout);
|
||||
|
||||
if ( rc == ETIMEDOUT )
|
||||
actions.push(trequest);
|
||||
}
|
||||
else
|
||||
pthread_cond_wait(&cond,&mutex);
|
||||
}
|
||||
|
||||
action = actions.front();
|
||||
actions.pop();
|
||||
|
||||
unlock();
|
||||
|
||||
listener->do_action(action.name,action.args);
|
||||
|
||||
if ( action.name == ActionListener::ACTION_TIMER )
|
||||
{
|
||||
timeout.tv_sec = time(NULL) + timer;
|
||||
timeout.tv_nsec = 0;
|
||||
}
|
||||
else if ( action.name == ActionListener::ACTION_FINALIZE )
|
||||
{
|
||||
finalize = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* -------------------------------------------------------------------------- */
|
||||
/* -------------------------------------------------------------------------- */
|
91
src/common/Attribute.cc
Normal file
91
src/common/Attribute.cc
Normal file
@ -0,0 +1,91 @@
|
||||
/* -------------------------------------------------------------------------- */
|
||||
/* Copyright 2002-2008, Distributed Systems Architecture Group, Universidad */
|
||||
/* Complutense de Madrid (dsa-research.org) */
|
||||
/* */
|
||||
/* Licensed under the Apache License, Version 2.0 (the "License"); you may */
|
||||
/* not use this file except in compliance with the License. You may obtain */
|
||||
/* a copy of the License at */
|
||||
/* */
|
||||
/* http://www.apache.org/licenses/LICENSE-2.0 */
|
||||
/* */
|
||||
/* Unless required by applicable law or agreed to in writing, software */
|
||||
/* distributed under the License is distributed on an "AS IS" BASIS, */
|
||||
/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. */
|
||||
/* See the License for the specific language governing permissions and */
|
||||
/* limitations under the License. */
|
||||
/* -------------------------------------------------------------------------- */
|
||||
|
||||
#include <string>
|
||||
#include <sstream>
|
||||
|
||||
#include "Attribute.h"
|
||||
|
||||
string * VectorAttribute::marshall()
|
||||
{
|
||||
ostringstream os;
|
||||
map<string,string>::iterator it;
|
||||
string * rs;
|
||||
|
||||
if ( attribute_value.size() == 0 )
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
it = attribute_value.begin();
|
||||
|
||||
os << it->first << "=" << it->second;
|
||||
|
||||
for (++it; it != attribute_value.end(); it++)
|
||||
{
|
||||
os << "," << it->first << "=" << it->second;
|
||||
}
|
||||
|
||||
rs = new string;
|
||||
|
||||
*rs = os.str();
|
||||
|
||||
return rs;
|
||||
}
|
||||
|
||||
/* -------------------------------------------------------------------------- */
|
||||
/* -------------------------------------------------------------------------- */
|
||||
|
||||
void VectorAttribute::unmarshall(string& sattr)
|
||||
{
|
||||
size_t pos;
|
||||
string tmp;
|
||||
|
||||
while ( (pos = sattr.find(',')) != string::npos )
|
||||
{
|
||||
sattr.replace(pos,1," ");
|
||||
}
|
||||
|
||||
istringstream is(sattr);
|
||||
|
||||
while ( is >> tmp )
|
||||
{
|
||||
pos = tmp.find("=");
|
||||
|
||||
attribute_value.insert(make_pair(tmp.substr(0,pos),
|
||||
tmp.substr(pos+1)));
|
||||
}
|
||||
}
|
||||
|
||||
/* -------------------------------------------------------------------------- */
|
||||
/* -------------------------------------------------------------------------- */
|
||||
|
||||
string VectorAttribute::vector_value(const char *name) const
|
||||
{
|
||||
map<string,string>::const_iterator it;
|
||||
|
||||
it = attribute_value.find(name);
|
||||
|
||||
if ( it == attribute_value.end() )
|
||||
{
|
||||
return "";
|
||||
}
|
||||
else
|
||||
{
|
||||
return it->second;
|
||||
}
|
||||
};
|
14
src/common/SConstruct
Normal file
14
src/common/SConstruct
Normal file
@ -0,0 +1,14 @@
|
||||
# SConstruct for src/common
|
||||
|
||||
Import('env')
|
||||
|
||||
lib_name='nebula_common'
|
||||
|
||||
# Sources to generate the library
|
||||
source_files=[
|
||||
'ActionManager.cc',
|
||||
'Attribute.cc'
|
||||
]
|
||||
|
||||
# Build library
|
||||
env.StaticLibrary(lib_name, source_files)
|
168
src/dm/DispatchManager.cc
Normal file
168
src/dm/DispatchManager.cc
Normal file
@ -0,0 +1,168 @@
|
||||
/* -------------------------------------------------------------------------- */
|
||||
/* Copyright 2002-2008, Distributed Systems Architecture Group, Universidad */
|
||||
/* Complutense de Madrid (dsa-research.org) */
|
||||
/* */
|
||||
/* Licensed under the Apache License, Version 2.0 (the "License"); you may */
|
||||
/* not use this file except in compliance with the License. You may obtain */
|
||||
/* a copy of the License at */
|
||||
/* */
|
||||
/* http://www.apache.org/licenses/LICENSE-2.0 */
|
||||
/* */
|
||||
/* Unless required by applicable law or agreed to in writing, software */
|
||||
/* distributed under the License is distributed on an "AS IS" BASIS, */
|
||||
/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. */
|
||||
/* See the License for the specific language governing permissions and */
|
||||
/* limitations under the License. */
|
||||
/* -------------------------------------------------------------------------- */
|
||||
|
||||
#include "DispatchManager.h"
|
||||
#include "Nebula.h"
|
||||
/* -------------------------------------------------------------------------- */
|
||||
/* -------------------------------------------------------------------------- */
|
||||
|
||||
extern "C" void * dm_action_loop(void *arg)
|
||||
{
|
||||
DispatchManager * dm;
|
||||
|
||||
if ( arg == 0 )
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
dm = static_cast<DispatchManager *>(arg);
|
||||
|
||||
Nebula::log("DiM",Log::INFO,"Dispatch Manager started.");
|
||||
|
||||
dm->am.loop(0,0);
|
||||
|
||||
Nebula::log("DiM",Log::INFO,"Dispatch Manager stopped.");
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* -------------------------------------------------------------------------- */
|
||||
|
||||
int DispatchManager::start()
|
||||
{
|
||||
int rc;
|
||||
pthread_attr_t pattr;
|
||||
|
||||
pthread_attr_init (&pattr);
|
||||
pthread_attr_setdetachstate (&pattr, PTHREAD_CREATE_JOINABLE);
|
||||
|
||||
Nebula::log("DiM",Log::INFO,"Starting Dispatch Manager...");
|
||||
|
||||
rc = pthread_create(&dm_thread,&pattr,dm_action_loop,(void *) this);
|
||||
|
||||
return rc;
|
||||
};
|
||||
|
||||
/* -------------------------------------------------------------------------- */
|
||||
/* -------------------------------------------------------------------------- */
|
||||
|
||||
void DispatchManager::trigger(Actions action, int _vid)
|
||||
{
|
||||
int * vid;
|
||||
string aname;
|
||||
|
||||
vid = new int(_vid);
|
||||
|
||||
switch (action)
|
||||
{
|
||||
case SUSPEND_SUCCESS:
|
||||
aname = "SUSPEND_SUCCESS";
|
||||
break;
|
||||
|
||||
case SUSPEND_FAILURE:
|
||||
aname = "SUSPEND_FAILURE";
|
||||
break;
|
||||
|
||||
case STOP_SUCCESS:
|
||||
aname = "STOP_SUCCESS";
|
||||
break;
|
||||
|
||||
case STOP_FAILURE:
|
||||
aname = "STOP_FAILURE";
|
||||
break;
|
||||
|
||||
case MIGRATE_FAILURE:
|
||||
aname = "MIGRATE_FAILURE";
|
||||
break;
|
||||
|
||||
case DONE:
|
||||
aname = "DONE";
|
||||
break;
|
||||
|
||||
case FAILED:
|
||||
aname = "FAILED";
|
||||
break;
|
||||
|
||||
case FINALIZE:
|
||||
aname = ACTION_FINALIZE;
|
||||
break;
|
||||
|
||||
default:
|
||||
delete vid;
|
||||
return;
|
||||
}
|
||||
|
||||
am.trigger(aname,vid);
|
||||
}
|
||||
|
||||
/* -------------------------------------------------------------------------- */
|
||||
/* -------------------------------------------------------------------------- */
|
||||
|
||||
void DispatchManager::do_action(const string &action, void * arg)
|
||||
{
|
||||
int vid;
|
||||
ostringstream oss;
|
||||
|
||||
if (arg == 0)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
vid = *(static_cast<int *>(arg));
|
||||
|
||||
delete static_cast<int *>(arg);
|
||||
|
||||
if (action == "SUSPEND_SUCCESS")
|
||||
{
|
||||
suspend_success_action(vid);
|
||||
}
|
||||
else if (action == "SUSPEND_FAILURE")
|
||||
{
|
||||
suspend_failure_action(vid);
|
||||
}
|
||||
else if (action == "STOP_SUCCESS")
|
||||
{
|
||||
stop_success_action(vid);
|
||||
}
|
||||
else if (action == "STOP_FAILURE")
|
||||
{
|
||||
stop_failure_action(vid);
|
||||
}
|
||||
else if (action == "MIGRATE_FAILURE")
|
||||
{
|
||||
migrate_failure_action(vid);
|
||||
}
|
||||
else if (action == "DONE")
|
||||
{
|
||||
done_action(vid);
|
||||
}
|
||||
else if (action == "FAILED")
|
||||
{
|
||||
failed_action(vid);
|
||||
}
|
||||
else if (action == ACTION_FINALIZE)
|
||||
{
|
||||
Nebula::log("DiM",Log::INFO,"Stopping Dispatch Manager...");
|
||||
}
|
||||
else
|
||||
{
|
||||
ostringstream oss;
|
||||
oss << "Unknown action name: " << action;
|
||||
|
||||
Nebula::log("DiM", Log::ERROR, oss);
|
||||
}
|
||||
}
|
566
src/dm/DispatchManagerActions.cc
Normal file
566
src/dm/DispatchManagerActions.cc
Normal file
@ -0,0 +1,566 @@
|
||||
/* -------------------------------------------------------------------------- */
|
||||
/* Copyright 2002-2008, Distributed Systems Architecture Group, Universidad */
|
||||
/* Complutense de Madrid (dsa-research.org) */
|
||||
/* */
|
||||
/* Licensed under the Apache License, Version 2.0 (the "License"); you may */
|
||||
/* not use this file except in compliance with the License. You may obtain */
|
||||
/* a copy of the License at */
|
||||
/* */
|
||||
/* http://www.apache.org/licenses/LICENSE-2.0 */
|
||||
/* */
|
||||
/* Unless required by applicable law or agreed to in writing, software */
|
||||
/* distributed under the License is distributed on an "AS IS" BASIS, */
|
||||
/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. */
|
||||
/* See the License for the specific language governing permissions and */
|
||||
/* limitations under the License. */
|
||||
/* -------------------------------------------------------------------------- */
|
||||
|
||||
#include "DispatchManager.h"
|
||||
#include "Nebula.h"
|
||||
|
||||
|
||||
void DispatchManager::host_add_vm(VirtualMachine *vm)
|
||||
{
|
||||
int cpu, memory, disk;
|
||||
int hid;
|
||||
Host * host;
|
||||
|
||||
if ( vm->hasHistory() == true )
|
||||
{
|
||||
hid=vm->get_hid();
|
||||
|
||||
host=hpool->get(hid, true);
|
||||
|
||||
if ( host != 0 )
|
||||
{
|
||||
vm->get_requirements(cpu, memory, disk);
|
||||
|
||||
host->add_vm(cpu, memory, disk);
|
||||
|
||||
hpool->update(host);
|
||||
|
||||
host->unlock();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* -------------------------------------------------------------------------- */
|
||||
/* -------------------------------------------------------------------------- */
|
||||
|
||||
void DispatchManager::host_del_vm(VirtualMachine *vm)
|
||||
{
|
||||
int cpu, memory, disk;
|
||||
int hid;
|
||||
Host * host;
|
||||
|
||||
if ( vm->hasHistory() == true )
|
||||
{
|
||||
hid=vm->get_hid();
|
||||
|
||||
host=hpool->get(hid, true);
|
||||
|
||||
if (host != 0)
|
||||
{
|
||||
vm->get_requirements(cpu, memory, disk);
|
||||
|
||||
host->del_vm(cpu, memory, disk);
|
||||
|
||||
hpool->update(host);
|
||||
|
||||
host->unlock();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* -------------------------------------------------------------------------- */
|
||||
/* -------------------------------------------------------------------------- */
|
||||
|
||||
int DispatchManager::allocate (
|
||||
int uid,
|
||||
const string& stemplate,
|
||||
int * oid)
|
||||
{
|
||||
Nebula::log("DiM",Log::DEBUG,"Allocating a new VM");
|
||||
|
||||
return vmpool->allocate(uid,stemplate,oid);
|
||||
};
|
||||
|
||||
/* -------------------------------------------------------------------------- */
|
||||
/* -------------------------------------------------------------------------- */
|
||||
|
||||
int DispatchManager::deploy (
|
||||
VirtualMachine * vm)
|
||||
{
|
||||
ostringstream oss;
|
||||
int vid;
|
||||
|
||||
if ( vm == 0 )
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
vid = vm->get_oid();
|
||||
|
||||
oss << "Deploying VM " << vid;
|
||||
Nebula::log("DiM",Log::DEBUG,oss);
|
||||
|
||||
if ( vm->get_state() == VirtualMachine::PENDING )
|
||||
{
|
||||
Nebula& nd = Nebula::instance();
|
||||
LifeCycleManager * lcm = nd.get_lcm();
|
||||
|
||||
vm->set_state(VirtualMachine::ACTIVE);
|
||||
|
||||
vmpool->update(vm);
|
||||
|
||||
host_add_vm(vm);
|
||||
|
||||
vm->log("DiM", Log::INFO, "New VM state is ACTIVE.");
|
||||
|
||||
lcm->trigger(LifeCycleManager::DEPLOY,vid);
|
||||
}
|
||||
else
|
||||
{
|
||||
goto error;
|
||||
}
|
||||
|
||||
vm->unlock();
|
||||
|
||||
return 0;
|
||||
|
||||
error:
|
||||
|
||||
oss.str("");
|
||||
oss << "Could not deploy VM " << vid << ", wrong state.";
|
||||
Nebula::log("DiM",Log::ERROR,oss);
|
||||
|
||||
vm->unlock();
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* -------------------------------------------------------------------------- */
|
||||
/* -------------------------------------------------------------------------- */
|
||||
|
||||
int DispatchManager::migrate(
|
||||
VirtualMachine * vm)
|
||||
{
|
||||
ostringstream oss;
|
||||
int vid;
|
||||
|
||||
if ( vm == 0 )
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
vid = vm->get_oid();
|
||||
|
||||
oss << "Migrating VM " << vid;
|
||||
Nebula::log("DiM",Log::DEBUG,oss);
|
||||
|
||||
if (vm->get_state() == VirtualMachine::ACTIVE &&
|
||||
vm->get_lcm_state() == VirtualMachine::RUNNING )
|
||||
{
|
||||
Nebula& nd = Nebula::instance();
|
||||
LifeCycleManager * lcm = nd.get_lcm();
|
||||
|
||||
lcm->trigger(LifeCycleManager::MIGRATE,vid);
|
||||
}
|
||||
else
|
||||
{
|
||||
goto error;
|
||||
}
|
||||
|
||||
vm->unlock();
|
||||
|
||||
return 0;
|
||||
|
||||
error:
|
||||
oss.str("");
|
||||
oss << "Could not migrate VM " << vid << ", wrong state.";
|
||||
Nebula::log("DiM",Log::ERROR,oss);
|
||||
|
||||
vm->unlock();
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* -------------------------------------------------------------------------- */
|
||||
/* -------------------------------------------------------------------------- */
|
||||
|
||||
int DispatchManager::live_migrate(
|
||||
VirtualMachine * vm)
|
||||
{
|
||||
ostringstream oss;
|
||||
int vid;
|
||||
|
||||
if ( vm == 0 )
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
vid = vm->get_oid();
|
||||
|
||||
oss << "Live-migrating VM " << vid;
|
||||
Nebula::log("DiM",Log::DEBUG,oss);
|
||||
|
||||
if (vm->get_state() == VirtualMachine::ACTIVE &&
|
||||
vm->get_lcm_state() == VirtualMachine::RUNNING )
|
||||
{
|
||||
Nebula& nd = Nebula::instance();
|
||||
LifeCycleManager * lcm = nd.get_lcm();
|
||||
|
||||
lcm->trigger(LifeCycleManager::LIVE_MIGRATE,vid);
|
||||
}
|
||||
else
|
||||
{
|
||||
goto error;
|
||||
}
|
||||
|
||||
vm->unlock();
|
||||
|
||||
return 0;
|
||||
|
||||
error:
|
||||
oss.str("");
|
||||
oss << "Could not live-migrate VM " << vid << ", wrong state.";
|
||||
Nebula::log("DiM",Log::ERROR,oss);
|
||||
|
||||
vm->unlock();
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* ************************************************************************** */
|
||||
/* ************************************************************************** */
|
||||
|
||||
int DispatchManager::shutdown (
|
||||
int vid)
|
||||
{
|
||||
ostringstream oss;
|
||||
VirtualMachine * vm;
|
||||
|
||||
vm = vmpool->get(vid,true);
|
||||
|
||||
if ( vm == 0 )
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
oss << "Shutting down VM " << vid;
|
||||
Nebula::log("DiM",Log::DEBUG,oss);
|
||||
|
||||
if (vm->get_state() == VirtualMachine::ACTIVE &&
|
||||
vm->get_lcm_state() == VirtualMachine::RUNNING )
|
||||
{
|
||||
Nebula& nd = Nebula::instance();
|
||||
LifeCycleManager * lcm = nd.get_lcm();
|
||||
|
||||
host_del_vm(vm);
|
||||
|
||||
lcm->trigger(LifeCycleManager::SHUTDOWN,vid);
|
||||
}
|
||||
else
|
||||
{
|
||||
goto error;
|
||||
}
|
||||
|
||||
vm->unlock();
|
||||
|
||||
return 0;
|
||||
|
||||
error:
|
||||
|
||||
oss.str("");
|
||||
oss << "Could not shutdown VM " << vid << ", wrong state.";
|
||||
Nebula::log("DiM",Log::ERROR,oss);
|
||||
|
||||
vm->unlock();
|
||||
return -2;
|
||||
}
|
||||
|
||||
/* -------------------------------------------------------------------------- */
|
||||
/* -------------------------------------------------------------------------- */
|
||||
|
||||
int DispatchManager::hold(
|
||||
int vid)
|
||||
{
|
||||
VirtualMachine * vm;
|
||||
ostringstream oss;
|
||||
|
||||
vm = vmpool->get(vid,true);
|
||||
|
||||
if ( vm == 0 )
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
oss << "Holding VM " << vid;
|
||||
Nebula::log("DiM",Log::DEBUG,oss);
|
||||
|
||||
if (vm->get_state() == VirtualMachine::PENDING)
|
||||
{
|
||||
vm->set_state(VirtualMachine::HOLD);
|
||||
|
||||
vmpool->update(vm);
|
||||
|
||||
vm->log("DiM", Log::INFO, "New VM state is HOLD.");
|
||||
}
|
||||
else
|
||||
{
|
||||
goto error;
|
||||
}
|
||||
|
||||
vm->unlock();
|
||||
|
||||
return 0;
|
||||
|
||||
error:
|
||||
|
||||
oss.str("");
|
||||
oss << "Could not hold VM " << vid << ", wrong state.";
|
||||
Nebula::log("DiM",Log::ERROR,oss);
|
||||
|
||||
vm->unlock();
|
||||
return -2;
|
||||
}
|
||||
|
||||
/* -------------------------------------------------------------------------- */
|
||||
/* -------------------------------------------------------------------------- */
|
||||
|
||||
int DispatchManager::release(
|
||||
int vid)
|
||||
{
|
||||
VirtualMachine * vm;
|
||||
ostringstream oss;
|
||||
|
||||
vm = vmpool->get(vid,true);
|
||||
|
||||
if ( vm == 0 )
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
oss << "Realising VM " << vid;
|
||||
Nebula::log("DiM",Log::DEBUG,oss);
|
||||
|
||||
if (vm->get_state() == VirtualMachine::HOLD)
|
||||
{
|
||||
vm->set_state(VirtualMachine::PENDING);
|
||||
|
||||
vmpool->update(vm);
|
||||
|
||||
vm->log("DiM", Log::INFO, "New VM state is PENDING.");
|
||||
}
|
||||
else
|
||||
{
|
||||
goto error;
|
||||
}
|
||||
|
||||
vm->unlock();
|
||||
|
||||
return 0;
|
||||
|
||||
error:
|
||||
oss.str("");
|
||||
oss << "Could not release VM " << vid << ", wrong state.";
|
||||
Nebula::log("DiM",Log::ERROR,oss);
|
||||
|
||||
vm->unlock();
|
||||
return -2;
|
||||
}
|
||||
|
||||
/* -------------------------------------------------------------------------- */
|
||||
/* -------------------------------------------------------------------------- */
|
||||
|
||||
int DispatchManager::stop(
|
||||
int vid)
|
||||
{
|
||||
VirtualMachine * vm;
|
||||
ostringstream oss;
|
||||
|
||||
vm = vmpool->get(vid,true);
|
||||
|
||||
if ( vm == 0 )
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
oss << "Stopping VM " << vid;
|
||||
Nebula::log("DiM",Log::DEBUG,oss);
|
||||
|
||||
if (vm->get_state() == VirtualMachine::ACTIVE &&
|
||||
vm->get_lcm_state() == VirtualMachine::RUNNING )
|
||||
{
|
||||
Nebula& nd = Nebula::instance();
|
||||
LifeCycleManager * lcm = nd.get_lcm();
|
||||
|
||||
host_del_vm(vm);
|
||||
|
||||
lcm->trigger(LifeCycleManager::STOP,vid);
|
||||
}
|
||||
else
|
||||
{
|
||||
goto error;
|
||||
}
|
||||
|
||||
vm->unlock();
|
||||
|
||||
return 0;
|
||||
|
||||
error:
|
||||
oss.str("");
|
||||
oss << "Could not stop VM " << vid << ", wrong state.";
|
||||
Nebula::log("DiM",Log::ERROR,oss);
|
||||
|
||||
vm->unlock();
|
||||
return -2;
|
||||
}
|
||||
|
||||
/* -------------------------------------------------------------------------- */
|
||||
/* -------------------------------------------------------------------------- */
|
||||
|
||||
int DispatchManager::suspend(
|
||||
int vid)
|
||||
{
|
||||
VirtualMachine * vm;
|
||||
ostringstream oss;
|
||||
|
||||
vm = vmpool->get(vid,true);
|
||||
|
||||
if ( vm == 0 )
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
oss << "Suspending VM " << vid;
|
||||
Nebula::log("DiM",Log::DEBUG,oss);
|
||||
|
||||
if (vm->get_state() == VirtualMachine::ACTIVE &&
|
||||
vm->get_lcm_state() == VirtualMachine::RUNNING )
|
||||
{
|
||||
Nebula& nd = Nebula::instance();
|
||||
LifeCycleManager * lcm = nd.get_lcm();
|
||||
|
||||
host_del_vm(vm);
|
||||
|
||||
lcm->trigger(LifeCycleManager::SUSPEND,vid);
|
||||
}
|
||||
else
|
||||
{
|
||||
goto error;
|
||||
}
|
||||
|
||||
vm->unlock();
|
||||
|
||||
return 0;
|
||||
|
||||
error:
|
||||
oss.str("");
|
||||
oss << "Could not suspend VM " << vid << ", wrong state.";
|
||||
Nebula::log("DiM",Log::ERROR,oss);
|
||||
|
||||
vm->unlock();
|
||||
return -2;
|
||||
}
|
||||
|
||||
/* -------------------------------------------------------------------------- */
|
||||
/* -------------------------------------------------------------------------- */
|
||||
|
||||
int DispatchManager::resume(
|
||||
int vid)
|
||||
{
|
||||
VirtualMachine * vm;
|
||||
ostringstream oss;
|
||||
|
||||
vm = vmpool->get(vid,true);
|
||||
|
||||
if ( vm == 0 )
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
oss << "Resuming VM " << vid;
|
||||
Nebula::log("DiM",Log::DEBUG,oss);
|
||||
|
||||
if (vm->get_state() == VirtualMachine::STOPPED )
|
||||
{
|
||||
vm->set_state(VirtualMachine::PENDING);
|
||||
|
||||
vmpool->update(vm);
|
||||
|
||||
vm->log("DiM", Log::INFO, "New VM state is PENDING.");
|
||||
}
|
||||
else if (vm->get_state() == VirtualMachine::SUSPENDED)
|
||||
{
|
||||
Nebula& nd = Nebula::instance();
|
||||
LifeCycleManager * lcm = nd.get_lcm();
|
||||
|
||||
vm->set_state(VirtualMachine::ACTIVE);
|
||||
|
||||
vmpool->update(vm);
|
||||
|
||||
host_add_vm(vm);
|
||||
|
||||
vm->log("DiM", Log::INFO, "New VM state is ACTIVE.");
|
||||
|
||||
lcm->trigger(LifeCycleManager::RESTORE,vid);
|
||||
}
|
||||
else
|
||||
{
|
||||
goto error;
|
||||
}
|
||||
|
||||
vm->unlock();
|
||||
|
||||
return 0;
|
||||
|
||||
error:
|
||||
oss.str("");
|
||||
oss << "Could not resume VM " << vid << ", wrong state.";
|
||||
Nebula::log("DiM",Log::ERROR,oss);
|
||||
|
||||
vm->unlock();
|
||||
return -2;
|
||||
}
|
||||
|
||||
/* -------------------------------------------------------------------------- */
|
||||
/* -------------------------------------------------------------------------- */
|
||||
|
||||
int DispatchManager::finalize(
|
||||
int vid)
|
||||
{
|
||||
VirtualMachine * vm;
|
||||
ostringstream oss;
|
||||
|
||||
vm = vmpool->get(vid,true);
|
||||
|
||||
if ( vm == 0 )
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (vm->get_state() == VirtualMachine::FAILED )
|
||||
{
|
||||
oss << "Finalizing VM " << vid;
|
||||
Nebula::log("DiM",Log::DEBUG,oss);
|
||||
|
||||
vm->set_state(VirtualMachine::DONE);
|
||||
|
||||
vmpool->update(vm);
|
||||
|
||||
vm->log("DiM", Log::INFO, "New VM state is DONE.");
|
||||
|
||||
vmpool->remove(vm);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
oss.str("");
|
||||
oss << "Could not finalize VM " << vid << ", wrong state.";
|
||||
Nebula::log("DiM",Log::ERROR,oss);
|
||||
|
||||
vm->unlock();
|
||||
|
||||
return -2;
|
||||
}
|
||||
|
||||
/* -------------------------------------------------------------------------- */
|
||||
/* -------------------------------------------------------------------------- */
|
223
src/dm/DispatchManagerStates.cc
Normal file
223
src/dm/DispatchManagerStates.cc
Normal file
@ -0,0 +1,223 @@
|
||||
/* -------------------------------------------------------------------------- */
|
||||
/* Copyright 2002-2008, Distributed Systems Architecture Group, Universidad */
|
||||
/* Complutense de Madrid (dsa-research.org) */
|
||||
/* */
|
||||
/* Licensed under the Apache License, Version 2.0 (the "License"); you may */
|
||||
/* not use this file except in compliance with the License. You may obtain */
|
||||
/* a copy of the License at */
|
||||
/* */
|
||||
/* http://www.apache.org/licenses/LICENSE-2.0 */
|
||||
/* */
|
||||
/* Unless required by applicable law or agreed to in writing, software */
|
||||
/* distributed under the License is distributed on an "AS IS" BASIS, */
|
||||
/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. */
|
||||
/* See the License for the specific language governing permissions and */
|
||||
/* limitations under the License. */
|
||||
/* -------------------------------------------------------------------------- */
|
||||
|
||||
#include "DispatchManager.h"
|
||||
#include "Nebula.h"
|
||||
|
||||
void DispatchManager::suspend_success_action(int vid)
|
||||
{
|
||||
VirtualMachine * vm;
|
||||
|
||||
vm = vmpool->get(vid,true);
|
||||
|
||||
if ( vm == 0 )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (vm->get_state() == VirtualMachine::ACTIVE )
|
||||
{
|
||||
vm->set_state(VirtualMachine::SUSPENDED);
|
||||
|
||||
vm->set_state(VirtualMachine::LCM_INIT);
|
||||
|
||||
vmpool->update(vm);
|
||||
|
||||
//TODO: Update suspended time
|
||||
|
||||
vm->log("DiM", Log::INFO, "New VM state is SUSPENDED");
|
||||
}
|
||||
else
|
||||
{
|
||||
goto error;
|
||||
}
|
||||
|
||||
vm->unlock();
|
||||
|
||||
return;
|
||||
|
||||
error:
|
||||
ostringstream oss;
|
||||
|
||||
oss << "suspend_success action received but VM " << vid
|
||||
<< " not in ACTIVE state";
|
||||
Nebula::log("DiM",Log::ERROR,oss);
|
||||
|
||||
vm->unlock();
|
||||
}
|
||||
|
||||
/* -------------------------------------------------------------------------- */
|
||||
/* -------------------------------------------------------------------------- */
|
||||
|
||||
void DispatchManager::suspend_failure_action(int vid)
|
||||
{
|
||||
failed_action(vid);
|
||||
}
|
||||
|
||||
/* -------------------------------------------------------------------------- */
|
||||
/* -------------------------------------------------------------------------- */
|
||||
|
||||
void DispatchManager::stop_success_action(int vid)
|
||||
{
|
||||
VirtualMachine * vm;
|
||||
|
||||
vm = vmpool->get(vid,true);
|
||||
|
||||
if ( vm == 0 )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (vm->get_state() == VirtualMachine::ACTIVE )
|
||||
{
|
||||
vm->set_state(VirtualMachine::STOPPED);
|
||||
|
||||
vm->set_state(VirtualMachine::LCM_INIT);
|
||||
|
||||
vm->set_etime(time(0));
|
||||
|
||||
vmpool->update(vm);
|
||||
|
||||
vmpool->update_history(vm);
|
||||
|
||||
vm->log("DiM", Log::INFO, "New VM state is STOPPED");
|
||||
}
|
||||
else
|
||||
{
|
||||
goto error;
|
||||
}
|
||||
|
||||
vm->unlock();
|
||||
|
||||
return;
|
||||
|
||||
error:
|
||||
ostringstream oss;
|
||||
|
||||
oss << "stop_success action received but VM " << vid
|
||||
<< " not in ACTIVE state";
|
||||
Nebula::log("DiM",Log::ERROR,oss);
|
||||
|
||||
vm->unlock();
|
||||
}
|
||||
|
||||
/* -------------------------------------------------------------------------- */
|
||||
/* -------------------------------------------------------------------------- */
|
||||
|
||||
void DispatchManager::stop_failure_action(int vid)
|
||||
{
|
||||
failed_action(vid);
|
||||
}
|
||||
|
||||
/* -------------------------------------------------------------------------- */
|
||||
/* -------------------------------------------------------------------------- */
|
||||
|
||||
void DispatchManager::migrate_failure_action(int vid)
|
||||
{
|
||||
failed_action(vid);
|
||||
}
|
||||
|
||||
/* -------------------------------------------------------------------------- */
|
||||
/* -------------------------------------------------------------------------- */
|
||||
|
||||
void DispatchManager::done_action(int vid)
|
||||
{
|
||||
VirtualMachine * vm;
|
||||
|
||||
vm = vmpool->get(vid,true);
|
||||
|
||||
if ( vm == 0 )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (vm->get_state() == VirtualMachine::ACTIVE )
|
||||
{
|
||||
time_t the_time = time(0);
|
||||
|
||||
vm->set_state(VirtualMachine::DONE);
|
||||
|
||||
vm->set_state(VirtualMachine::LCM_INIT);
|
||||
|
||||
vm->set_etime(the_time);
|
||||
|
||||
vm->set_exit_time(the_time);
|
||||
|
||||
vmpool->update(vm);
|
||||
|
||||
vmpool->update_history(vm);
|
||||
|
||||
vm->log("DiM", Log::INFO, "New VM state is DONE");
|
||||
|
||||
vmpool->remove(vm);
|
||||
}
|
||||
else
|
||||
{
|
||||
goto error;
|
||||
}
|
||||
|
||||
return;
|
||||
|
||||
error:
|
||||
ostringstream oss;
|
||||
|
||||
oss << "done action received but VM " << vid << " not in ACTIVE state";
|
||||
Nebula::log("DiM",Log::ERROR,oss);
|
||||
|
||||
vm->unlock();
|
||||
}
|
||||
|
||||
/* -------------------------------------------------------------------------- */
|
||||
/* -------------------------------------------------------------------------- */
|
||||
|
||||
void DispatchManager::failed_action(int vid)
|
||||
{
|
||||
VirtualMachine * vm;
|
||||
time_t the_time;
|
||||
|
||||
vm = vmpool->get(vid,true);
|
||||
|
||||
if ( vm == 0 )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
the_time = time(0);
|
||||
|
||||
vm->set_state(VirtualMachine::LCM_INIT);
|
||||
|
||||
vm->set_state(VirtualMachine::FAILED);
|
||||
|
||||
vm->set_etime(the_time);
|
||||
|
||||
vm->set_exit_time(the_time);
|
||||
|
||||
host_del_vm(vm);
|
||||
|
||||
vmpool->update(vm);
|
||||
|
||||
vmpool->update_history(vm);
|
||||
|
||||
vm->log("DiM", Log::INFO, "New VM state is FAILED");
|
||||
|
||||
vm->unlock();
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
/* -------------------------------------------------------------------------- */
|
||||
/* -------------------------------------------------------------------------- */
|
15
src/dm/SConstruct
Normal file
15
src/dm/SConstruct
Normal file
@ -0,0 +1,15 @@
|
||||
# SConstruct for src/vm
|
||||
|
||||
Import('env')
|
||||
|
||||
lib_name='nebula_dm'
|
||||
|
||||
# Sources to generate the library
|
||||
source_files=[
|
||||
'DispatchManager.cc',
|
||||
'DispatchManagerActions.cc',
|
||||
'DispatchManagerStates.cc',
|
||||
]
|
||||
|
||||
# Build library
|
||||
env.StaticLibrary(lib_name, source_files)
|
413
src/host/Host.cc
Normal file
413
src/host/Host.cc
Normal file
@ -0,0 +1,413 @@
|
||||
/* -------------------------------------------------------------------------- */
|
||||
/* Copyright 2002-2008, Distributed Systems Architecture Group, Universidad */
|
||||
/* Complutense de Madrid (dsa-research.org) */
|
||||
/* */
|
||||
/* Licensed under the Apache License, Version 2.0 (the "License"); you may */
|
||||
/* not use this file except in compliance with the License. You may obtain */
|
||||
/* a copy of the License at */
|
||||
/* */
|
||||
/* http://www.apache.org/licenses/LICENSE-2.0 */
|
||||
/* */
|
||||
/* Unless required by applicable law or agreed to in writing, software */
|
||||
/* distributed under the License is distributed on an "AS IS" BASIS, */
|
||||
/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. */
|
||||
/* See the License for the specific language governing permissions and */
|
||||
/* limitations under the License. */
|
||||
/* -------------------------------------------------------------------------- */
|
||||
|
||||
#include <limits.h>
|
||||
#include <string.h>
|
||||
|
||||
#include <iostream>
|
||||
#include <sstream>
|
||||
|
||||
#include "Host.h"
|
||||
extern "C"
|
||||
{
|
||||
#include "host_parser.h"
|
||||
}
|
||||
|
||||
/* ************************************************************************** */
|
||||
/* Host :: Constructor/Destructor */
|
||||
/* ************************************************************************** */
|
||||
|
||||
Host::Host(
|
||||
int id,
|
||||
string _hostname,
|
||||
string _im_mad_name,
|
||||
string _vmm_mad_name,
|
||||
string _tm_mad_name,
|
||||
bool _managed):
|
||||
PoolObjectSQL(id),
|
||||
hostname(_hostname),
|
||||
state(INIT),
|
||||
im_mad_name(_im_mad_name),
|
||||
vmm_mad_name(_vmm_mad_name),
|
||||
tm_mad_name(_tm_mad_name),
|
||||
last_monitored(time(0)),
|
||||
managed(_managed),
|
||||
host_template(id),
|
||||
host_share(id){};
|
||||
|
||||
|
||||
Host::~Host(){};
|
||||
|
||||
/* ************************************************************************** */
|
||||
/* Host :: Database Access Functions */
|
||||
/* ************************************************************************** */
|
||||
|
||||
const char * Host::table = "hostpool";
|
||||
|
||||
const char * Host::db_names = "(hid,host_name,state,im_mad,vm_mad,"
|
||||
"tm_mad,last_mon_time,managed)";
|
||||
|
||||
const char * Host::db_bootstrap = "CREATE TABLE hostpool ("
|
||||
"hid INTEGER PRIMARY KEY,host_name TEXT,state INTEGER,"
|
||||
"im_mad TEXT,vm_mad TEXT,tm_mad TEXT,last_mon_time INTEGER,"
|
||||
"managed INTEGER)";
|
||||
|
||||
/* -------------------------------------------------------------------------- */
|
||||
/* -------------------------------------------------------------------------- */
|
||||
|
||||
int Host::unmarshall(int num, char **names, char ** values)
|
||||
{
|
||||
if ((values[HID] == 0) ||
|
||||
(values[HOST_NAME] == 0) ||
|
||||
(values[STATE] == 0) ||
|
||||
(values[IM_MAD] == 0) ||
|
||||
(values[VM_MAD] == 0) ||
|
||||
(values[TM_MAD] == 0) ||
|
||||
(values[LAST_MON_TIME] == 0) ||
|
||||
(values[MANAGED] == 0) ||
|
||||
(num != LIMIT ))
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
oid = atoi(values[HID]);
|
||||
hostname = values[HOST_NAME];
|
||||
state = static_cast<HostState>(atoi(values[STATE]));
|
||||
|
||||
im_mad_name = values[IM_MAD];
|
||||
vmm_mad_name = values[VM_MAD];
|
||||
tm_mad_name = values[TM_MAD];
|
||||
|
||||
last_monitored = static_cast<time_t>(atoi(values[LAST_MON_TIME]));
|
||||
|
||||
managed = atoi(values[MANAGED]) == 1?true:false;
|
||||
|
||||
host_template.id = oid;
|
||||
host_share.hsid = oid;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* -------------------------------------------------------------------------- */
|
||||
/* -------------------------------------------------------------------------- */
|
||||
|
||||
extern "C" int host_select_cb (
|
||||
void * _host,
|
||||
int num,
|
||||
char ** values,
|
||||
char ** names)
|
||||
{
|
||||
Host * host;
|
||||
|
||||
host = static_cast<Host *>(_host);
|
||||
|
||||
if (host == 0)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
return host->unmarshall(num,names,values);
|
||||
};
|
||||
|
||||
/* -------------------------------------------------------------------------- */
|
||||
|
||||
int Host::select(SqliteDB *db)
|
||||
{
|
||||
ostringstream oss;
|
||||
int rc;
|
||||
int boid;
|
||||
|
||||
oss << "SELECT * FROM " << table << " WHERE hid = " << oid;
|
||||
|
||||
boid = oid;
|
||||
oid = -1;
|
||||
|
||||
rc = db->exec(oss, host_select_cb, (void *) this);
|
||||
|
||||
if ((rc != 0) || (oid != boid ))
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
// Get the template
|
||||
|
||||
rc = host_template.select(db);
|
||||
|
||||
if ( rc != 0 )
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
// Select the host shares from the DB
|
||||
|
||||
rc = host_share.select(db);
|
||||
|
||||
if ( rc != 0 )
|
||||
{
|
||||
return rc;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* -------------------------------------------------------------------------- */
|
||||
/* -------------------------------------------------------------------------- */
|
||||
|
||||
int Host::insert(SqliteDB *db)
|
||||
{
|
||||
int rc;
|
||||
map<int,HostShare *>::iterator iter;
|
||||
|
||||
// Set up the template ID, to insert it
|
||||
|
||||
if ( host_template.id == -1 )
|
||||
{
|
||||
host_template.id = oid;
|
||||
}
|
||||
|
||||
// Set up the share ID, to insert it
|
||||
|
||||
if ( host_share.hsid == -1 )
|
||||
{
|
||||
host_share.hsid = oid;
|
||||
}
|
||||
|
||||
//Insert the Host and its template
|
||||
rc = update(db);
|
||||
|
||||
if ( rc != 0 )
|
||||
{
|
||||
return rc;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* -------------------------------------------------------------------------- */
|
||||
/* -------------------------------------------------------------------------- */
|
||||
|
||||
int Host::update(SqliteDB *db)
|
||||
{
|
||||
ostringstream oss;
|
||||
int rc;
|
||||
|
||||
int managed_i = managed?1:0;
|
||||
|
||||
//Update template.
|
||||
|
||||
rc = host_template.update(db);
|
||||
|
||||
if ( rc != 0 )
|
||||
{
|
||||
return rc;
|
||||
}
|
||||
|
||||
// Let's get the HostShares before the host
|
||||
|
||||
rc = host_share.update(db);
|
||||
|
||||
if ( rc != 0 )
|
||||
{
|
||||
return rc;
|
||||
}
|
||||
|
||||
// Construct the SQL statement to Insert or Replace (effectively, update)
|
||||
|
||||
oss << "INSERT OR REPLACE INTO " << table << " "<< db_names <<" VALUES ("<<
|
||||
oid << "," <<
|
||||
"'" << hostname << "'," <<
|
||||
state << "," <<
|
||||
"'" << im_mad_name << "'," <<
|
||||
"'" << vmm_mad_name << "'," <<
|
||||
"'" << tm_mad_name << "'," <<
|
||||
last_monitored << "," <<
|
||||
managed_i << ")";
|
||||
|
||||
rc = db->exec(oss);
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
||||
/* -------------------------------------------------------------------------- */
|
||||
/* -------------------------------------------------------------------------- */
|
||||
|
||||
int Host::drop(SqliteDB * db)
|
||||
{
|
||||
ostringstream oss;
|
||||
|
||||
map<int,HostShare *>::iterator iter;
|
||||
|
||||
// First, drop the template
|
||||
host_template.drop(db);
|
||||
|
||||
// Second, drop the host_shares
|
||||
host_share.drop(db);
|
||||
|
||||
// Third, drop the host itself
|
||||
oss << "DELETE FROM " << table << " WHERE hid=" << oid;
|
||||
|
||||
return db->exec(oss);
|
||||
}
|
||||
|
||||
/* -------------------------------------------------------------------------- */
|
||||
/* -------------------------------------------------------------------------- */
|
||||
|
||||
int Host::update_info(string &parse_str)
|
||||
{
|
||||
char * error_msg;
|
||||
int rc;
|
||||
|
||||
// If we have a default
|
||||
|
||||
rc = host_template.parse(parse_str, &error_msg);
|
||||
|
||||
if ( rc != 0 )
|
||||
{
|
||||
/*
|
||||
Nebula::log("ONE", Log::ERROR, error_msg);
|
||||
*/
|
||||
free(error_msg);
|
||||
return -1;
|
||||
}
|
||||
|
||||
get_template_attribute("TOTALCPU",host_share.max_cpu);
|
||||
get_template_attribute("TOTALMEMORY",host_share.max_mem);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* ************************************************************************** */
|
||||
/* Host :: Misc */
|
||||
/* ************************************************************************** */
|
||||
|
||||
ostream& operator<<(ostream& os, Host& host)
|
||||
{
|
||||
os << "HID = " << host.oid << endl;
|
||||
os << "HOSTNAME = " << host.hostname << endl;
|
||||
os << "IM MAD = " << host.im_mad_name << endl;
|
||||
os << "VMM MAD = " << host.vmm_mad_name << endl;
|
||||
os << "TM MAD = " << host.tm_mad_name << endl;
|
||||
os << "MANAGED = " << host.managed << endl;
|
||||
os << "ATTRIBUTES" << endl << host.host_template<< endl;
|
||||
os << "HOST SHARES" << endl << host.host_share <<endl;
|
||||
|
||||
return os;
|
||||
};
|
||||
|
||||
/* ************************************************************************** */
|
||||
/* Host :: Parse functions to compute rank and evaluate requirements */
|
||||
/* ************************************************************************** */
|
||||
|
||||
pthread_mutex_t Host::lex_mutex = PTHREAD_MUTEX_INITIALIZER;
|
||||
|
||||
extern "C"
|
||||
{
|
||||
int host_requirements_parse(Host * host, bool& result, char ** errmsg);
|
||||
|
||||
int host_rank_parse(Host * host, int& result, char ** errmsg);
|
||||
|
||||
void host_lex_destroy();
|
||||
|
||||
YY_BUFFER_STATE host__scan_string(const char * str);
|
||||
|
||||
void host__delete_buffer(YY_BUFFER_STATE);
|
||||
}
|
||||
|
||||
/* -------------------------------------------------------------------------- */
|
||||
/* -------------------------------------------------------------------------- */
|
||||
|
||||
int Host::match(const string& requirements, bool& result, char **errmsg)
|
||||
{
|
||||
YY_BUFFER_STATE str_buffer;
|
||||
const char * str;
|
||||
int rc;
|
||||
|
||||
pthread_mutex_lock(&lex_mutex);
|
||||
|
||||
*errmsg = 0;
|
||||
|
||||
str = requirements.c_str();
|
||||
|
||||
str_buffer = host__scan_string(str);
|
||||
|
||||
if (str_buffer == 0)
|
||||
{
|
||||
goto error_yy;
|
||||
}
|
||||
|
||||
rc = host_requirements_parse(this,result,errmsg);
|
||||
|
||||
host__delete_buffer(str_buffer);
|
||||
|
||||
host_lex_destroy();
|
||||
|
||||
pthread_mutex_unlock(&lex_mutex);
|
||||
|
||||
return rc;
|
||||
|
||||
error_yy:
|
||||
|
||||
*errmsg=strdup("Error setting scan buffer");
|
||||
|
||||
pthread_mutex_unlock(&lex_mutex);
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* -------------------------------------------------------------------------- */
|
||||
/* -------------------------------------------------------------------------- */
|
||||
|
||||
int Host::rank(const string& rank, int& result, char **errmsg)
|
||||
{
|
||||
YY_BUFFER_STATE str_buffer;
|
||||
const char * str;
|
||||
int rc;
|
||||
|
||||
pthread_mutex_lock(&lex_mutex);
|
||||
|
||||
*errmsg = 0;
|
||||
|
||||
str = rank.c_str();
|
||||
|
||||
str_buffer = host__scan_string(str);
|
||||
|
||||
if (str_buffer == 0)
|
||||
{
|
||||
goto error_yy;
|
||||
}
|
||||
|
||||
rc = host_rank_parse(this,result,errmsg);
|
||||
|
||||
host__delete_buffer(str_buffer);
|
||||
|
||||
host_lex_destroy();
|
||||
|
||||
pthread_mutex_unlock(&lex_mutex);
|
||||
|
||||
return rc;
|
||||
|
||||
error_yy:
|
||||
|
||||
*errmsg=strdup("Error setting scan buffer");
|
||||
|
||||
pthread_mutex_unlock(&lex_mutex);
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* -------------------------------------------------------------------------- */
|
||||
/* -------------------------------------------------------------------------- */
|
103
src/host/HostPool.cc
Normal file
103
src/host/HostPool.cc
Normal file
@ -0,0 +1,103 @@
|
||||
/* -------------------------------------------------------------------------- */
|
||||
/* Copyright 2002-2008, Distributed Systems Architecture Group, Universidad */
|
||||
/* Complutense de Madrid (dsa-research.org) */
|
||||
/* */
|
||||
/* Licensed under the Apache License, Version 2.0 (the "License"); you may */
|
||||
/* not use this file except in compliance with the License. You may obtain */
|
||||
/* a copy of the License at */
|
||||
/* */
|
||||
/* http://www.apache.org/licenses/LICENSE-2.0 */
|
||||
/* */
|
||||
/* Unless required by applicable law or agreed to in writing, software */
|
||||
/* distributed under the License is distributed on an "AS IS" BASIS, */
|
||||
/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. */
|
||||
/* See the License for the specific language governing permissions and */
|
||||
/* limitations under the License. */
|
||||
/* -------------------------------------------------------------------------- */
|
||||
|
||||
/* ************************************************************************** */
|
||||
/* Host Pool */
|
||||
/* ************************************************************************** */
|
||||
|
||||
#include "HostPool.h"
|
||||
#include "Nebula.h"
|
||||
|
||||
int HostPool::allocate (
|
||||
int * oid,
|
||||
string hostname,
|
||||
string im_mad_name,
|
||||
string vmm_mad_name,
|
||||
string tm_mad_name,
|
||||
bool managed)
|
||||
{
|
||||
Host * host;
|
||||
|
||||
// Build a new Host object
|
||||
|
||||
host = new Host(-1,
|
||||
hostname,
|
||||
im_mad_name,
|
||||
vmm_mad_name,
|
||||
tm_mad_name,
|
||||
managed);
|
||||
|
||||
// Insert the Object in the pool
|
||||
|
||||
*oid = PoolSQL::allocate(host);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* -------------------------------------------------------------------------- */
|
||||
/* -------------------------------------------------------------------------- */
|
||||
|
||||
extern "C"
|
||||
{
|
||||
static int discover_cb (
|
||||
void * _discovered_hosts,
|
||||
int num,
|
||||
char ** values,
|
||||
char ** names)
|
||||
{
|
||||
map<int, string> * discovered_hosts;
|
||||
string im_mad(values[1]);
|
||||
int hid;
|
||||
|
||||
discovered_hosts = static_cast<map<int, string> *>(_discovered_hosts);
|
||||
|
||||
if ( (discovered_hosts == 0) || (num<=0) || (values[0] == 0) )
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
hid = atoi(values[0]);
|
||||
im_mad = values[1];
|
||||
|
||||
discovered_hosts->insert(make_pair(hid,im_mad));
|
||||
|
||||
return 0;
|
||||
};
|
||||
}
|
||||
|
||||
/* -------------------------------------------------------------------------- */
|
||||
|
||||
int HostPool::discover(map<int, string> * discovered_hosts)
|
||||
{
|
||||
|
||||
ostringstream sql;
|
||||
int rc;
|
||||
|
||||
lock();
|
||||
|
||||
sql << "SELECT hid, im_mad FROM "
|
||||
<< Host::table << " ORDER BY last_mon_time LIMIT 10";
|
||||
|
||||
rc = db->exec(sql,discover_cb,(void *) discovered_hosts);
|
||||
|
||||
unlock();
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
||||
/* -------------------------------------------------------------------------- */
|
||||
/* -------------------------------------------------------------------------- */
|
213
src/host/HostShare.cc
Normal file
213
src/host/HostShare.cc
Normal file
@ -0,0 +1,213 @@
|
||||
/* -------------------------------------------------------------------------- */
|
||||
/* Copyright 2002-2008, Distributed Systems Architecture Group, Universidad */
|
||||
/* Complutense de Madrid (dsa-research.org) */
|
||||
/* */
|
||||
/* Licensed under the Apache License, Version 2.0 (the "License"); you may */
|
||||
/* not use this file except in compliance with the License. You may obtain */
|
||||
/* a copy of the License at */
|
||||
/* */
|
||||
/* http://www.apache.org/licenses/LICENSE-2.0 */
|
||||
/* */
|
||||
/* Unless required by applicable law or agreed to in writing, software */
|
||||
/* distributed under the License is distributed on an "AS IS" BASIS, */
|
||||
/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. */
|
||||
/* See the License for the specific language governing permissions and */
|
||||
/* limitations under the License. */
|
||||
/* -------------------------------------------------------------------------- */
|
||||
#include <limits.h>
|
||||
#include <string.h>
|
||||
|
||||
#include <iostream>
|
||||
#include <sstream>
|
||||
|
||||
#include "HostShare.h"
|
||||
|
||||
/* ************************************************************************** */
|
||||
/* HostShare :: Constructor/Destructor */
|
||||
/* ************************************************************************** */
|
||||
|
||||
HostShare::HostShare(
|
||||
int _hsid,
|
||||
int _max_disk,
|
||||
int _max_mem,
|
||||
int _max_cpu):
|
||||
ObjectSQL(),
|
||||
hsid(_hsid),
|
||||
endpoint(""),
|
||||
disk_usage(0),
|
||||
mem_usage(0),
|
||||
cpu_usage(0),
|
||||
max_disk(_max_disk),
|
||||
max_mem(_max_mem),
|
||||
max_cpu(_max_cpu),
|
||||
running_vms(0)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
/* ************************************************************************** */
|
||||
/* HostShare :: Database Access Functions */
|
||||
/* ************************************************************************** */
|
||||
|
||||
const char * HostShare::table = "hostshares";
|
||||
|
||||
const char * HostShare::db_names = "(hsid,endpoint,disk_usage,"
|
||||
"mem_usage,cpu_usage,max_disk,max_mem,max_cpu,running_vms)";
|
||||
|
||||
const char * HostShare::db_bootstrap = "CREATE TABLE hostshares ("
|
||||
"hsid INTEGER PRIMARY KEY, endpoint TEXT,"
|
||||
"disk_usage INTEGER,mem_usage INTEGER,cpu_usage INTEGER,"
|
||||
"max_disk INTEGER,max_mem INTEGER,max_cpu INTEGER,running_vms INTEGER)";
|
||||
|
||||
/* -------------------------------------------------------------------------- */
|
||||
/* -------------------------------------------------------------------------- */
|
||||
|
||||
int HostShare::unmarshall(int num, char **names, char ** values)
|
||||
{
|
||||
if ((values[HSID] == 0) ||
|
||||
(values[ENDPOINT] == 0) ||
|
||||
(values[DISK_USAGE] == 0) ||
|
||||
(values[MEM_USAGE] == 0) ||
|
||||
(values[CPU_USAGE] == 0) ||
|
||||
(values[MAX_DISK] == 0) ||
|
||||
(values[MAX_MEMORY] == 0) ||
|
||||
(values[MAX_CPU] == 0) ||
|
||||
(values[RUNNING_VMS] == 0) ||
|
||||
(num != LIMIT ))
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
hsid = atoi(values[HSID]);
|
||||
endpoint = values[ENDPOINT];
|
||||
disk_usage = atoi(values[DISK_USAGE]);
|
||||
mem_usage = atoi(values[MEM_USAGE]);
|
||||
cpu_usage = atoi(values[CPU_USAGE]);
|
||||
max_disk = atoi(values[MAX_DISK]);
|
||||
max_mem = atoi(values[MAX_MEMORY]);
|
||||
max_cpu = atoi(values[MAX_CPU]);
|
||||
running_vms= atoi(values[RUNNING_VMS]);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* -------------------------------------------------------------------------- */
|
||||
/* -------------------------------------------------------------------------- */
|
||||
|
||||
extern "C" int host_share_select_cb (
|
||||
void * _hs,
|
||||
int num,
|
||||
char ** values,
|
||||
char ** names)
|
||||
{
|
||||
HostShare * hs;
|
||||
|
||||
hs = static_cast<HostShare *>(_hs);
|
||||
|
||||
if (hs == 0)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
return hs->unmarshall(num,names,values);
|
||||
};
|
||||
|
||||
/* -------------------------------------------------------------------------- */
|
||||
|
||||
int HostShare::select(SqliteDB * db)
|
||||
{
|
||||
ostringstream oss;
|
||||
int rc;
|
||||
int bhsid;
|
||||
|
||||
oss << "SELECT * FROM " << table << " WHERE hsid = " << hsid;
|
||||
|
||||
bhsid = hsid;
|
||||
hsid = -1;
|
||||
|
||||
rc = db->exec(oss,host_share_select_cb,(void *) this);
|
||||
|
||||
if (hsid != bhsid )
|
||||
{
|
||||
rc = -1;
|
||||
}
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
||||
/* -------------------------------------------------------------------------- */
|
||||
/* -------------------------------------------------------------------------- */
|
||||
|
||||
int HostShare::insert(SqliteDB * db)
|
||||
{
|
||||
int rc;
|
||||
|
||||
//Insert the HostShare
|
||||
rc = update(db);
|
||||
|
||||
if ( rc != 0 )
|
||||
{
|
||||
return rc;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* -------------------------------------------------------------------------- */
|
||||
/* -------------------------------------------------------------------------- */
|
||||
|
||||
int HostShare::update(SqliteDB * db)
|
||||
{
|
||||
ostringstream oss;
|
||||
int rc;
|
||||
|
||||
oss << "INSERT OR REPLACE INTO " << table << " "<< db_names <<" VALUES ("<<
|
||||
hsid << "," <<
|
||||
"'" << endpoint << "'," <<
|
||||
disk_usage << "," <<
|
||||
mem_usage << "," <<
|
||||
cpu_usage << "," <<
|
||||
max_disk << "," <<
|
||||
max_mem << "," <<
|
||||
max_cpu << "," <<
|
||||
running_vms << ")";
|
||||
|
||||
rc = db->exec(oss);
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
||||
/* -------------------------------------------------------------------------- */
|
||||
/* -------------------------------------------------------------------------- */
|
||||
|
||||
int HostShare::drop(SqliteDB * db)
|
||||
{
|
||||
ostringstream oss;
|
||||
|
||||
// Drop the HostShare itself
|
||||
oss << "DELETE FROM " << table << " WHERE hsid=" << hsid;
|
||||
|
||||
return db->exec(oss);
|
||||
}
|
||||
|
||||
/* ************************************************************************** */
|
||||
/* HostShare :: Misc */
|
||||
/* ************************************************************************** */
|
||||
|
||||
ostream& operator<<(ostream& os, HostShare& hs)
|
||||
{
|
||||
os << "\tHSID = " << hs.hsid << endl;
|
||||
os << "\tENDPOINT = " << hs.endpoint<< endl;
|
||||
|
||||
os << "\tMAX_CPU = " << hs.max_cpu << endl;
|
||||
os << "\tMAX_MEMORY = " << hs.max_mem << endl;
|
||||
os << "\tMAX_DISK = " << hs.max_disk<< endl;
|
||||
|
||||
os << "\tCPU_USAGE = " << hs.cpu_usage << endl;
|
||||
os << "\tMEMORY_USAGE = " << hs.mem_usage << endl;
|
||||
os << "\tDISK_USAGE = " << hs.disk_usage<< endl;
|
||||
|
||||
os << "\tRUNNING_VMS = " << hs.running_vms<< endl;
|
||||
|
||||
return os;
|
||||
};
|
24
src/host/HostTemplate.cc
Normal file
24
src/host/HostTemplate.cc
Normal file
@ -0,0 +1,24 @@
|
||||
/* -------------------------------------------------------------------------- */
|
||||
/* Copyright 2002-2008, Distributed Systems Architecture Group, Universidad */
|
||||
/* Complutense de Madrid (dsa-research.org) */
|
||||
/* */
|
||||
/* Licensed under the Apache License, Version 2.0 (the "License"); you may */
|
||||
/* not use this file except in compliance with the License. You may obtain */
|
||||
/* a copy of the License at */
|
||||
/* */
|
||||
/* http://www.apache.org/licenses/LICENSE-2.0 */
|
||||
/* */
|
||||
/* Unless required by applicable law or agreed to in writing, software */
|
||||
/* distributed under the License is distributed on an "AS IS" BASIS, */
|
||||
/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. */
|
||||
/* See the License for the specific language governing permissions and */
|
||||
/* limitations under the License. */
|
||||
/* -------------------------------------------------------------------------- */
|
||||
|
||||
#include "HostTemplate.h"
|
||||
|
||||
const char * HostTemplate::table = "host_attributes";
|
||||
|
||||
const char * HostTemplate::db_bootstrap = "CREATE TABLE host_attributes"
|
||||
" (id INTEGER, name TEXT, type INTEGER, value TEXT, PRIMARY KEY(id,name))";
|
||||
|
37
src/host/SConstruct
Normal file
37
src/host/SConstruct
Normal file
@ -0,0 +1,37 @@
|
||||
# SConstruct for src/vm
|
||||
|
||||
Import('env')
|
||||
|
||||
lib_name='nebula_host'
|
||||
|
||||
if env['parsers']=='yes':
|
||||
# LEX
|
||||
parser=env.Lex(
|
||||
source='host_parser.l'
|
||||
)
|
||||
env.NoClean(parser)
|
||||
|
||||
# BISON
|
||||
parser=env.Bison(
|
||||
source='host_requirements.y'
|
||||
)
|
||||
env.NoClean(parser)
|
||||
|
||||
parser=env.Bison(
|
||||
source='host_rank.y'
|
||||
)
|
||||
env.NoClean(parser)
|
||||
|
||||
# Sources to generate the library
|
||||
source_files=[
|
||||
'Host.cc',
|
||||
'HostShare.cc',
|
||||
'HostPool.cc',
|
||||
'HostTemplate.cc',
|
||||
'host_parser.c',
|
||||
'host_requirements.cc',
|
||||
'host_rank.cc',
|
||||
]
|
||||
|
||||
# Build library
|
||||
env.StaticLibrary(lib_name, source_files)
|
1799
src/host/host_parser.c
Normal file
1799
src/host/host_parser.c
Normal file
File diff suppressed because it is too large
Load Diff
296
src/host/host_parser.h
Normal file
296
src/host/host_parser.h
Normal file
@ -0,0 +1,296 @@
|
||||
#ifndef host_HEADER_H
|
||||
#define host_HEADER_H 1
|
||||
#define host_IN_HEADER 1
|
||||
|
||||
#line 6 "host_parser.h"
|
||||
|
||||
#line 8 "host_parser.h"
|
||||
|
||||
#define YY_INT_ALIGNED short int
|
||||
|
||||
/* A lexical scanner generated by flex */
|
||||
|
||||
#define FLEX_SCANNER
|
||||
#define YY_FLEX_MAJOR_VERSION 2
|
||||
#define YY_FLEX_MINOR_VERSION 5
|
||||
#define YY_FLEX_SUBMINOR_VERSION 34
|
||||
#if YY_FLEX_SUBMINOR_VERSION > 0
|
||||
#define FLEX_BETA
|
||||
#endif
|
||||
|
||||
/* First, we deal with platform-specific or compiler-specific issues. */
|
||||
|
||||
/* begin standard C headers. */
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <errno.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
/* end standard C headers. */
|
||||
|
||||
/* flex integer type definitions */
|
||||
|
||||
#ifndef FLEXINT_H
|
||||
#define FLEXINT_H
|
||||
|
||||
/* C99 systems have <inttypes.h>. Non-C99 systems may or may not. */
|
||||
|
||||
#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
|
||||
|
||||
/* C99 says to define __STDC_LIMIT_MACROS before including stdint.h,
|
||||
* if you want the limit (max/min) macros for int types.
|
||||
*/
|
||||
#ifndef __STDC_LIMIT_MACROS
|
||||
#define __STDC_LIMIT_MACROS 1
|
||||
#endif
|
||||
|
||||
#include <inttypes.h>
|
||||
typedef int8_t flex_int8_t;
|
||||
typedef uint8_t flex_uint8_t;
|
||||
typedef int16_t flex_int16_t;
|
||||
typedef uint16_t flex_uint16_t;
|
||||
typedef int32_t flex_int32_t;
|
||||
typedef uint32_t flex_uint32_t;
|
||||
#else
|
||||
typedef signed char flex_int8_t;
|
||||
typedef short int flex_int16_t;
|
||||
typedef int flex_int32_t;
|
||||
typedef unsigned char flex_uint8_t;
|
||||
typedef unsigned short int flex_uint16_t;
|
||||
typedef unsigned int flex_uint32_t;
|
||||
#endif /* ! C99 */
|
||||
|
||||
/* Limits of integral types. */
|
||||
#ifndef INT8_MIN
|
||||
#define INT8_MIN (-128)
|
||||
#endif
|
||||
#ifndef INT16_MIN
|
||||
#define INT16_MIN (-32767-1)
|
||||
#endif
|
||||
#ifndef INT32_MIN
|
||||
#define INT32_MIN (-2147483647-1)
|
||||
#endif
|
||||
#ifndef INT8_MAX
|
||||
#define INT8_MAX (127)
|
||||
#endif
|
||||
#ifndef INT16_MAX
|
||||
#define INT16_MAX (32767)
|
||||
#endif
|
||||
#ifndef INT32_MAX
|
||||
#define INT32_MAX (2147483647)
|
||||
#endif
|
||||
#ifndef UINT8_MAX
|
||||
#define UINT8_MAX (255U)
|
||||
#endif
|
||||
#ifndef UINT16_MAX
|
||||
#define UINT16_MAX (65535U)
|
||||
#endif
|
||||
#ifndef UINT32_MAX
|
||||
#define UINT32_MAX (4294967295U)
|
||||
#endif
|
||||
|
||||
#endif /* ! FLEXINT_H */
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
||||
/* The "const" storage-class-modifier is valid. */
|
||||
#define YY_USE_CONST
|
||||
|
||||
#else /* ! __cplusplus */
|
||||
|
||||
/* C99 requires __STDC__ to be defined as 1. */
|
||||
#if defined (__STDC__)
|
||||
|
||||
#define YY_USE_CONST
|
||||
|
||||
#endif /* defined (__STDC__) */
|
||||
#endif /* ! __cplusplus */
|
||||
|
||||
#ifdef YY_USE_CONST
|
||||
#define yyconst const
|
||||
#else
|
||||
#define yyconst
|
||||
#endif
|
||||
|
||||
/* Size of default input buffer. */
|
||||
#ifndef YY_BUF_SIZE
|
||||
#define YY_BUF_SIZE 16384
|
||||
#endif
|
||||
|
||||
#ifndef YY_TYPEDEF_YY_BUFFER_STATE
|
||||
#define YY_TYPEDEF_YY_BUFFER_STATE
|
||||
typedef struct yy_buffer_state *YY_BUFFER_STATE;
|
||||
#endif
|
||||
|
||||
extern int host_leng;
|
||||
|
||||
extern FILE *host_in, *host_out;
|
||||
|
||||
/* The following is because we cannot portably get our hands on size_t
|
||||
* (without autoconf's help, which isn't available because we want
|
||||
* flex-generated scanners to compile on their own).
|
||||
* Given that the standard has decreed that size_t exists since 1989,
|
||||
* I guess we can afford to depend on it. Manoj.
|
||||
*/
|
||||
|
||||
#ifndef YY_TYPEDEF_YY_SIZE_T
|
||||
#define YY_TYPEDEF_YY_SIZE_T
|
||||
typedef size_t yy_size_t;
|
||||
#endif
|
||||
|
||||
#ifndef YY_STRUCT_YY_BUFFER_STATE
|
||||
#define YY_STRUCT_YY_BUFFER_STATE
|
||||
struct yy_buffer_state
|
||||
{
|
||||
FILE *yy_input_file;
|
||||
|
||||
char *yy_ch_buf; /* input buffer */
|
||||
char *yy_buf_pos; /* current position in input buffer */
|
||||
|
||||
/* Size of input buffer in bytes, not including room for EOB
|
||||
* characters.
|
||||
*/
|
||||
yy_size_t yy_buf_size;
|
||||
|
||||
/* Number of characters read into yy_ch_buf, not including EOB
|
||||
* characters.
|
||||
*/
|
||||
int yy_n_chars;
|
||||
|
||||
/* Whether we "own" the buffer - i.e., we know we created it,
|
||||
* and can realloc() it to grow it, and should free() it to
|
||||
* delete it.
|
||||
*/
|
||||
int yy_is_our_buffer;
|
||||
|
||||
/* Whether this is an "interactive" input source; if so, and
|
||||
* if we're using stdio for input, then we want to use getc()
|
||||
* instead of fread(), to make sure we stop fetching input after
|
||||
* each newline.
|
||||
*/
|
||||
int yy_is_interactive;
|
||||
|
||||
/* Whether we're considered to be at the beginning of a line.
|
||||
* If so, '^' rules will be active on the next match, otherwise
|
||||
* not.
|
||||
*/
|
||||
int yy_at_bol;
|
||||
|
||||
int yy_bs_lineno; /**< The line count. */
|
||||
int yy_bs_column; /**< The column count. */
|
||||
|
||||
/* Whether to try to fill the input buffer when we reach the
|
||||
* end of it.
|
||||
*/
|
||||
int yy_fill_buffer;
|
||||
|
||||
int yy_buffer_status;
|
||||
|
||||
};
|
||||
#endif /* !YY_STRUCT_YY_BUFFER_STATE */
|
||||
|
||||
void host_restart (FILE *input_file );
|
||||
void host__switch_to_buffer (YY_BUFFER_STATE new_buffer );
|
||||
YY_BUFFER_STATE host__create_buffer (FILE *file,int size );
|
||||
void host__delete_buffer (YY_BUFFER_STATE b );
|
||||
void host__flush_buffer (YY_BUFFER_STATE b );
|
||||
void host_push_buffer_state (YY_BUFFER_STATE new_buffer );
|
||||
void host_pop_buffer_state (void );
|
||||
|
||||
YY_BUFFER_STATE host__scan_buffer (char *base,yy_size_t size );
|
||||
YY_BUFFER_STATE host__scan_string (yyconst char *yy_str );
|
||||
YY_BUFFER_STATE host__scan_bytes (yyconst char *bytes,int len );
|
||||
|
||||
void *host_alloc (yy_size_t );
|
||||
void *host_realloc (void *,yy_size_t );
|
||||
void host_free (void * );
|
||||
|
||||
/* Begin user sect3 */
|
||||
|
||||
extern int host_lineno;
|
||||
|
||||
extern char *host_text;
|
||||
#define yytext_ptr host_text
|
||||
|
||||
#ifdef YY_HEADER_EXPORT_START_CONDITIONS
|
||||
#define INITIAL 0
|
||||
|
||||
#endif
|
||||
|
||||
#ifndef YY_NO_UNISTD_H
|
||||
/* Special case for "unistd.h", since it is non-ANSI. We include it way
|
||||
* down here because we want the user's section 1 to have been scanned first.
|
||||
* The user has a chance to override it with an option.
|
||||
*/
|
||||
#include <unistd.h>
|
||||
#endif
|
||||
|
||||
#ifndef YY_EXTRA_TYPE
|
||||
#define YY_EXTRA_TYPE void *
|
||||
#endif
|
||||
|
||||
/* Macros after this point can all be overridden by user definitions in
|
||||
* section 1.
|
||||
*/
|
||||
|
||||
#ifndef YY_SKIP_YYWRAP
|
||||
#ifdef __cplusplus
|
||||
extern "C" int host_wrap (void );
|
||||
#else
|
||||
extern int host_wrap (void );
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef yytext_ptr
|
||||
static void yy_flex_strncpy (char *,yyconst char *,int );
|
||||
#endif
|
||||
|
||||
#ifdef YY_NEED_STRLEN
|
||||
static int yy_flex_strlen (yyconst char * );
|
||||
#endif
|
||||
|
||||
#ifndef YY_NO_INPUT
|
||||
|
||||
#endif
|
||||
|
||||
/* Amount of stuff to slurp up with each read. */
|
||||
#ifndef YY_READ_BUF_SIZE
|
||||
#define YY_READ_BUF_SIZE 8192
|
||||
#endif
|
||||
|
||||
/* Number of entries by which start-condition stack grows. */
|
||||
#ifndef YY_START_STACK_INCR
|
||||
#define YY_START_STACK_INCR 25
|
||||
#endif
|
||||
|
||||
/* Default declaration of generated scanner - a define so the user can
|
||||
* easily add parameters.
|
||||
*/
|
||||
#ifndef YY_DECL
|
||||
#define YY_DECL_IS_OURS 1
|
||||
|
||||
extern int host_lex (void);
|
||||
|
||||
#define YY_DECL int host_lex (void)
|
||||
#endif /* !YY_DECL */
|
||||
|
||||
/* yy_get_previous_state - get the state just before the EOB char was reached */
|
||||
|
||||
#undef YY_NEW_FILE
|
||||
#undef YY_FLUSH_BUFFER
|
||||
#undef yy_set_bol
|
||||
#undef yy_new_buffer
|
||||
#undef yy_set_interactive
|
||||
#undef YY_DO_BEFORE_ACTION
|
||||
|
||||
#ifdef YY_DECL_IS_OURS
|
||||
#undef YY_DECL_IS_OURS
|
||||
#undef YY_DECL
|
||||
#endif
|
||||
|
||||
#line 64 "host_parser.l"
|
||||
|
||||
|
||||
#line 295 "host_parser.h"
|
||||
#undef host_IN_HEADER
|
||||
#endif /* host_HEADER_H */
|
69
src/host/host_parser.l
Normal file
69
src/host/host_parser.l
Normal file
@ -0,0 +1,69 @@
|
||||
/* -------------------------------------------------------------------------- */
|
||||
/* Copyright 2002-2008, Distributed Systems Architecture Group, Universidad */
|
||||
/* Complutense de Madrid (dsa-research.org) */
|
||||
/* */
|
||||
/* Licensed under the Apache License, Version 2.0 (the "License"); you may */
|
||||
/* not use this file except in compliance with the License. You may obtain */
|
||||
/* a copy of the License at */
|
||||
/* */
|
||||
/* http://www.apache.org/licenses/LICENSE-2.0 */
|
||||
/* */
|
||||
/* Unless required by applicable law or agreed to in writing, software */
|
||||
/* distributed under the License is distributed on an "AS IS" BASIS, */
|
||||
/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. */
|
||||
/* See the License for the specific language governing permissions and */
|
||||
/* limitations under the License. */
|
||||
/* -------------------------------------------------------------------------- */
|
||||
|
||||
%{
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <pthread.h>
|
||||
|
||||
#include "host_requirements.h"
|
||||
#include "host_rank.h"
|
||||
|
||||
#define YY_DECL int host_lex (YYSTYPE *lvalp, YYLTYPE *llocp)
|
||||
|
||||
#define YY_USER_ACTION llocp->first_line = yylineno; \
|
||||
llocp->first_column = llocp->last_column; \
|
||||
llocp->last_column += yyleng;
|
||||
%}
|
||||
|
||||
%option nounput
|
||||
%option prefix="host_"
|
||||
%option outfile="host_parser.c"
|
||||
%option header-file="host_parser.h"
|
||||
%option yylineno
|
||||
|
||||
%%
|
||||
/* --- Tokens --- */
|
||||
|
||||
[!&|=><()\*\+/\^-] { return *yytext;}
|
||||
|
||||
/* --- Strings, also quoted form --- */
|
||||
|
||||
[A-Za-z][0-9A-Za-z_]* { lvalp->val_str = strdup(yytext);
|
||||
return STRING;}
|
||||
|
||||
\"\" { lvalp->val_str = NULL;
|
||||
return STRING;}
|
||||
|
||||
\"[^\"]*\" { lvalp->val_str = strdup(yytext+1);
|
||||
lvalp->val_str[yyleng-2] = '\0';
|
||||
return STRING;}
|
||||
/* --- Integers --- */
|
||||
|
||||
-?[0-9]+ { lvalp->val_int = atoi(yytext);
|
||||
return INTEGER;}
|
||||
/* --- blanks --- */
|
||||
|
||||
[[:blank:]]*
|
||||
|
||||
%%
|
||||
|
||||
int host_wrap()
|
||||
{
|
||||
return 1;
|
||||
}
|
1713
src/host/host_rank.cc
Normal file
1713
src/host/host_rank.cc
Normal file
File diff suppressed because it is too large
Load Diff
83
src/host/host_rank.h
Normal file
83
src/host/host_rank.h
Normal file
@ -0,0 +1,83 @@
|
||||
/* A Bison parser, made by GNU Bison 2.3. */
|
||||
|
||||
/* Skeleton interface for Bison's Yacc-like parsers in C
|
||||
|
||||
Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006
|
||||
Free Software Foundation, Inc.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2, or (at your option)
|
||||
any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
||||
Boston, MA 02110-1301, USA. */
|
||||
|
||||
/* As a special exception, you may create a larger work that contains
|
||||
part or all of the Bison parser skeleton and distribute that work
|
||||
under terms of your choice, so long as that work isn't itself a
|
||||
parser generator using the skeleton or a modified version thereof
|
||||
as a parser skeleton. Alternatively, if you modify or redistribute
|
||||
the parser skeleton itself, you may (at your option) remove this
|
||||
special exception, which will cause the skeleton and the resulting
|
||||
Bison output files to be licensed under the GNU General Public
|
||||
License without this special exception.
|
||||
|
||||
This special exception was added by the Free Software Foundation in
|
||||
version 2.2 of Bison. */
|
||||
|
||||
/* Tokens. */
|
||||
#ifndef YYTOKENTYPE
|
||||
# define YYTOKENTYPE
|
||||
/* Put the tokens into the symbol table, so that GDB and other debuggers
|
||||
know about them. */
|
||||
enum yytokentype {
|
||||
INTEGER = 258,
|
||||
STRING = 259
|
||||
};
|
||||
#endif
|
||||
/* Tokens. */
|
||||
#define INTEGER 258
|
||||
#define STRING 259
|
||||
|
||||
|
||||
|
||||
|
||||
#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
|
||||
typedef union YYSTYPE
|
||||
#line 55 "host_rank.y"
|
||||
{
|
||||
char * val_str;
|
||||
int val_int;
|
||||
}
|
||||
/* Line 1489 of yacc.c. */
|
||||
#line 62 "host_rank.hh"
|
||||
YYSTYPE;
|
||||
# define yystype YYSTYPE /* obsolescent; will be withdrawn */
|
||||
# define YYSTYPE_IS_DECLARED 1
|
||||
# define YYSTYPE_IS_TRIVIAL 1
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
#if ! defined YYLTYPE && ! defined YYLTYPE_IS_DECLARED
|
||||
typedef struct YYLTYPE
|
||||
{
|
||||
int first_line;
|
||||
int first_column;
|
||||
int last_line;
|
||||
int last_column;
|
||||
} YYLTYPE;
|
||||
# define yyltype YYLTYPE /* obsolescent; will be withdrawn */
|
||||
# define YYLTYPE_IS_DECLARED 1
|
||||
# define YYLTYPE_IS_TRIVIAL 1
|
||||
#endif
|
||||
|
||||
|
117
src/host/host_rank.y
Normal file
117
src/host/host_rank.y
Normal file
@ -0,0 +1,117 @@
|
||||
/* -------------------------------------------------------------------------- */
|
||||
/* Copyright 2002-2008, Distributed Systems Architecture Group, Universidad */
|
||||
/* Complutense de Madrid (dsa-research.org) */
|
||||
/* */
|
||||
/* Licensed under the Apache License, Version 2.0 (the "License"); you may */
|
||||
/* not use this file except in compliance with the License. You may obtain */
|
||||
/* a copy of the License at */
|
||||
/* */
|
||||
/* http://www.apache.org/licenses/LICENSE-2.0 */
|
||||
/* */
|
||||
/* Unless required by applicable law or agreed to in writing, software */
|
||||
/* distributed under the License is distributed on an "AS IS" BASIS, */
|
||||
/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. */
|
||||
/* See the License for the specific language governing permissions and */
|
||||
/* limitations under the License. */
|
||||
/* -------------------------------------------------------------------------- */
|
||||
|
||||
%{
|
||||
#include <iostream>
|
||||
#include <sstream>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
#include <algorithm>
|
||||
|
||||
#include <ctype.h>
|
||||
#include <string.h>
|
||||
#include <fnmatch.h>
|
||||
|
||||
#include "host_rank.h"
|
||||
#include "Host.h"
|
||||
|
||||
#define YYERROR_VERBOSE
|
||||
#define host_rank_lex host_lex
|
||||
|
||||
extern "C"
|
||||
{
|
||||
void host_rank_error(
|
||||
YYLTYPE * llocp,
|
||||
Host * host,
|
||||
int& result,
|
||||
char ** error_msg,
|
||||
const char * str);
|
||||
|
||||
int host_rank_lex (YYSTYPE *lvalp, YYLTYPE *llocp);
|
||||
|
||||
int host_rank_parse(Host * host, int& result, char ** errmsg);
|
||||
}
|
||||
|
||||
%}
|
||||
|
||||
%parse-param {Host * host}
|
||||
%parse-param {int& result}
|
||||
%parse-param {char ** error_msg}
|
||||
|
||||
%union {
|
||||
char * val_str;
|
||||
int val_int;
|
||||
};
|
||||
|
||||
%defines
|
||||
%locations
|
||||
%pure_parser
|
||||
%name-prefix = "host_rank_"
|
||||
%output = "host_rank.cc"
|
||||
|
||||
%left '+' '-'
|
||||
%left '*' '/'
|
||||
%token <val_int> INTEGER
|
||||
%token <val_str> STRING
|
||||
%type <val_int> stmt expr
|
||||
|
||||
%%
|
||||
|
||||
stmt: expr { result=$1;}
|
||||
| { result=0;} /* TRUE BY DEFAULT, ON EMPTY STRINGS */
|
||||
;
|
||||
|
||||
expr: STRING { int val;
|
||||
host->get_template_attribute($1,val);
|
||||
$$ = val;
|
||||
free($1);}
|
||||
| INTEGER { $$ = $1;}
|
||||
| expr '+' expr { $$ = $1 + $3;}
|
||||
| expr '-' expr { $$ = $1 - $3;}
|
||||
| expr '*' expr { $$ = $1 * $3;}
|
||||
| expr '/' expr { $$ = $1 / $3;}
|
||||
| '-' expr { $$ = - $2;}
|
||||
| '(' expr ')' { $$ = $2;}
|
||||
;
|
||||
|
||||
%%
|
||||
|
||||
extern "C" void host_rank_error(
|
||||
YYLTYPE * llocp,
|
||||
Host * host,
|
||||
int& result,
|
||||
char ** error_msg,
|
||||
const char * str)
|
||||
{
|
||||
int length;
|
||||
|
||||
length = strlen(str)+ 64;
|
||||
|
||||
*error_msg = (char *) malloc(sizeof(char)*length);
|
||||
|
||||
if (*error_msg != 0)
|
||||
{
|
||||
snprintf(*error_msg,
|
||||
length,
|
||||
"%s at line %i, columns %i:%i",
|
||||
str,
|
||||
llocp->first_line,
|
||||
llocp->first_column,
|
||||
llocp->last_column);
|
||||
}
|
||||
}
|
||||
|
1777
src/host/host_requirements.cc
Normal file
1777
src/host/host_requirements.cc
Normal file
File diff suppressed because it is too large
Load Diff
83
src/host/host_requirements.h
Normal file
83
src/host/host_requirements.h
Normal file
@ -0,0 +1,83 @@
|
||||
/* A Bison parser, made by GNU Bison 2.3. */
|
||||
|
||||
/* Skeleton interface for Bison's Yacc-like parsers in C
|
||||
|
||||
Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006
|
||||
Free Software Foundation, Inc.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2, or (at your option)
|
||||
any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
||||
Boston, MA 02110-1301, USA. */
|
||||
|
||||
/* As a special exception, you may create a larger work that contains
|
||||
part or all of the Bison parser skeleton and distribute that work
|
||||
under terms of your choice, so long as that work isn't itself a
|
||||
parser generator using the skeleton or a modified version thereof
|
||||
as a parser skeleton. Alternatively, if you modify or redistribute
|
||||
the parser skeleton itself, you may (at your option) remove this
|
||||
special exception, which will cause the skeleton and the resulting
|
||||
Bison output files to be licensed under the GNU General Public
|
||||
License without this special exception.
|
||||
|
||||
This special exception was added by the Free Software Foundation in
|
||||
version 2.2 of Bison. */
|
||||
|
||||
/* Tokens. */
|
||||
#ifndef YYTOKENTYPE
|
||||
# define YYTOKENTYPE
|
||||
/* Put the tokens into the symbol table, so that GDB and other debuggers
|
||||
know about them. */
|
||||
enum yytokentype {
|
||||
INTEGER = 258,
|
||||
STRING = 259
|
||||
};
|
||||
#endif
|
||||
/* Tokens. */
|
||||
#define INTEGER 258
|
||||
#define STRING 259
|
||||
|
||||
|
||||
|
||||
|
||||
#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
|
||||
typedef union YYSTYPE
|
||||
#line 55 "host_requirements.y"
|
||||
{
|
||||
char * val_str;
|
||||
int val_int;
|
||||
}
|
||||
/* Line 1489 of yacc.c. */
|
||||
#line 62 "host_requirements.hh"
|
||||
YYSTYPE;
|
||||
# define yystype YYSTYPE /* obsolescent; will be withdrawn */
|
||||
# define YYSTYPE_IS_DECLARED 1
|
||||
# define YYSTYPE_IS_TRIVIAL 1
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
#if ! defined YYLTYPE && ! defined YYLTYPE_IS_DECLARED
|
||||
typedef struct YYLTYPE
|
||||
{
|
||||
int first_line;
|
||||
int first_column;
|
||||
int last_line;
|
||||
int last_column;
|
||||
} YYLTYPE;
|
||||
# define yyltype YYLTYPE /* obsolescent; will be withdrawn */
|
||||
# define YYLTYPE_IS_DECLARED 1
|
||||
# define YYLTYPE_IS_TRIVIAL 1
|
||||
#endif
|
||||
|
||||
|
174
src/host/host_requirements.y
Normal file
174
src/host/host_requirements.y
Normal file
@ -0,0 +1,174 @@
|
||||
/* -------------------------------------------------------------------------- */
|
||||
/* Copyright 2002-2008, Distributed Systems Architecture Group, Universidad */
|
||||
/* Complutense de Madrid (dsa-research.org) */
|
||||
/* */
|
||||
/* Licensed under the Apache License, Version 2.0 (the "License"); you may */
|
||||
/* not use this file except in compliance with the License. You may obtain */
|
||||
/* a copy of the License at */
|
||||
/* */
|
||||
/* http://www.apache.org/licenses/LICENSE-2.0 */
|
||||
/* */
|
||||
/* Unless required by applicable law or agreed to in writing, software */
|
||||
/* distributed under the License is distributed on an "AS IS" BASIS, */
|
||||
/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. */
|
||||
/* See the License for the specific language governing permissions and */
|
||||
/* limitations under the License. */
|
||||
/* -------------------------------------------------------------------------- */
|
||||
|
||||
%{
|
||||
#include <iostream>
|
||||
#include <sstream>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
#include <algorithm>
|
||||
|
||||
#include <ctype.h>
|
||||
#include <string.h>
|
||||
#include <fnmatch.h>
|
||||
|
||||
#include "host_requirements.h"
|
||||
#include "Host.h"
|
||||
|
||||
#define YYERROR_VERBOSE
|
||||
#define host_requirements_lex host_lex
|
||||
|
||||
extern "C"
|
||||
{
|
||||
void host_requirements_error(
|
||||
YYLTYPE * llocp,
|
||||
Host * host,
|
||||
bool& result,
|
||||
char ** error_msg,
|
||||
const char * str);
|
||||
|
||||
int host_requirements_lex (YYSTYPE *lvalp, YYLTYPE *llocp);
|
||||
|
||||
int host_requirements_parse(Host * host, bool& result, char ** errmsg);
|
||||
}
|
||||
|
||||
%}
|
||||
|
||||
%parse-param {Host * host}
|
||||
%parse-param {bool& result}
|
||||
%parse-param {char ** error_msg}
|
||||
|
||||
%union {
|
||||
char * val_str;
|
||||
int val_int;
|
||||
};
|
||||
|
||||
%defines
|
||||
%locations
|
||||
%pure_parser
|
||||
%name-prefix = "host_requirements_"
|
||||
%output = "host_requirements.cc"
|
||||
|
||||
%left '!' '&' '|'
|
||||
%token <val_int> INTEGER
|
||||
%token <val_str> STRING
|
||||
%type <val_int> stmt expr
|
||||
|
||||
%%
|
||||
|
||||
stmt: expr { result=$1; }
|
||||
| { result=true; } /* TRUE BY DEFAULT, ON EMPTY STRINGS */
|
||||
;
|
||||
|
||||
expr: STRING '=' INTEGER {
|
||||
int val;
|
||||
|
||||
host->get_template_attribute($1,val);
|
||||
$$ = val == $3;
|
||||
|
||||
free($1);}
|
||||
|
||||
| STRING '!' '=' INTEGER {
|
||||
int val;
|
||||
|
||||
host->get_template_attribute($1,val);
|
||||
$$ = val != $4;
|
||||
|
||||
free($1);}
|
||||
|
||||
| STRING '>' INTEGER {
|
||||
int val;
|
||||
|
||||
host->get_template_attribute($1,val);
|
||||
$$ = val > $3;
|
||||
|
||||
free($1);}
|
||||
|
||||
| STRING '<' INTEGER {
|
||||
int val;
|
||||
|
||||
host->get_template_attribute($1,val);
|
||||
$$ = val < $3;
|
||||
|
||||
free($1);}
|
||||
|
||||
| STRING '=' STRING {
|
||||
string val;
|
||||
|
||||
host->get_template_attribute($1,val);
|
||||
|
||||
if (val == "")
|
||||
{
|
||||
$$ = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
$$ = fnmatch($3, val.c_str(), 0) == 0;
|
||||
}
|
||||
|
||||
free($1);
|
||||
free($3);}
|
||||
|
||||
| STRING '!''=' STRING {
|
||||
string val;
|
||||
|
||||
host->get_template_attribute($1,val);
|
||||
|
||||
if (val == "")
|
||||
{
|
||||
$$ = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
$$ = fnmatch($4, val.c_str(), 0) != 0;
|
||||
}
|
||||
|
||||
free($1);
|
||||
free($4);}
|
||||
|
||||
| expr '&' expr { $$ = $1 && $3; }
|
||||
| expr '|' expr { $$ = $1 || $3; }
|
||||
| '!' expr { $$ = ! $2; }
|
||||
| '(' expr ')' { $$ = $2; }
|
||||
;
|
||||
|
||||
%%
|
||||
|
||||
extern "C" void host_requirements_error(
|
||||
YYLTYPE * llocp,
|
||||
Host * host,
|
||||
bool& result,
|
||||
char ** error_msg,
|
||||
const char * str)
|
||||
{
|
||||
int length;
|
||||
|
||||
length = strlen(str)+ 64;
|
||||
|
||||
*error_msg = (char *) malloc(sizeof(char)*length);
|
||||
|
||||
if (*error_msg != 0)
|
||||
{
|
||||
snprintf(*error_msg,
|
||||
length,
|
||||
"%s at line %i, columns %i:%i",
|
||||
str,
|
||||
llocp->first_line,
|
||||
llocp->first_column,
|
||||
llocp->last_column);
|
||||
}
|
||||
}
|
215
src/im/InformationManager.cc
Normal file
215
src/im/InformationManager.cc
Normal file
@ -0,0 +1,215 @@
|
||||
/* -------------------------------------------------------------------------- */
|
||||
/* Copyright 2002-2008, Distributed Systems Architecture Group, Universidad */
|
||||
/* Complutense de Madrid (dsa-research.org) */
|
||||
/* */
|
||||
/* Licensed under the Apache License, Version 2.0 (the "License"); you may */
|
||||
/* not use this file except in compliance with the License. You may obtain */
|
||||
/* a copy of the License at */
|
||||
/* */
|
||||
/* http://www.apache.org/licenses/LICENSE-2.0 */
|
||||
/* */
|
||||
/* Unless required by applicable law or agreed to in writing, software */
|
||||
/* distributed under the License is distributed on an "AS IS" BASIS, */
|
||||
/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. */
|
||||
/* See the License for the specific language governing permissions and */
|
||||
/* limitations under the License. */
|
||||
/* -------------------------------------------------------------------------- */
|
||||
|
||||
#include "InformationManager.h"
|
||||
#include "Nebula.h"
|
||||
|
||||
/* -------------------------------------------------------------------------- */
|
||||
/* -------------------------------------------------------------------------- */
|
||||
|
||||
extern "C" void * im_action_loop(void *arg)
|
||||
{
|
||||
InformationManager * im;
|
||||
|
||||
if ( arg == 0 )
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
Nebula::log("InM",Log::INFO,"Information Manager started.");
|
||||
|
||||
im = static_cast<InformationManager *>(arg);
|
||||
|
||||
im->am.loop(im->timer_period,0);
|
||||
|
||||
Nebula::log("InM",Log::INFO,"Information Manager stopped.");
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* -------------------------------------------------------------------------- */
|
||||
/* -------------------------------------------------------------------------- */
|
||||
|
||||
void InformationManager::load_mads(int uid)
|
||||
{
|
||||
InformationManagerDriver * im_mad;
|
||||
unsigned int i;
|
||||
ostringstream oss;
|
||||
const VectorAttribute * vattr;
|
||||
int rc;
|
||||
|
||||
Nebula::log("InM",Log::INFO,"Loading Information Manager drivers.");
|
||||
|
||||
for(i=0;i<mad_conf.size();i++)
|
||||
{
|
||||
vattr = static_cast<const VectorAttribute *>(mad_conf[i]);
|
||||
|
||||
oss.str("");
|
||||
oss << "\tLoading driver: " << vattr->vector_value("NAME");
|
||||
|
||||
Nebula::log("InM",Log::INFO,oss);
|
||||
|
||||
im_mad = new InformationManagerDriver(0,vattr->value(),false,hpool);
|
||||
|
||||
rc = add(im_mad);
|
||||
|
||||
if ( rc == 0 )
|
||||
{
|
||||
oss.str("");
|
||||
oss << "\tDriver " << vattr->vector_value("NAME") << " loaded";
|
||||
|
||||
Nebula::log("InM",Log::INFO,oss);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* -------------------------------------------------------------------------- */
|
||||
/* -------------------------------------------------------------------------- */
|
||||
|
||||
int InformationManager::start()
|
||||
{
|
||||
int rc;
|
||||
pthread_attr_t pattr;
|
||||
|
||||
rc = MadManager::start();
|
||||
|
||||
if ( rc != 0 )
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
Nebula::log("InM",Log::INFO,"Starting Information Manager...");
|
||||
|
||||
pthread_attr_init (&pattr);
|
||||
pthread_attr_setdetachstate (&pattr, PTHREAD_CREATE_JOINABLE);
|
||||
|
||||
rc = pthread_create(&im_thread,&pattr,im_action_loop,(void *) this);
|
||||
|
||||
return rc;
|
||||
};
|
||||
|
||||
/* -------------------------------------------------------------------------- */
|
||||
/* -------------------------------------------------------------------------- */
|
||||
|
||||
void InformationManager::do_action(const string &action, void * arg)
|
||||
{
|
||||
if (action == ACTION_TIMER)
|
||||
{
|
||||
timer_action();
|
||||
}
|
||||
else if (action == ACTION_FINALIZE)
|
||||
{
|
||||
Nebula::log("InM",Log::INFO,"Stopping Information Manager...");
|
||||
|
||||
MadManager::stop();
|
||||
}
|
||||
else
|
||||
{
|
||||
ostringstream oss;
|
||||
oss << "Unknown action name: " << action;
|
||||
|
||||
Nebula::log("InM", Log::ERROR, oss);
|
||||
}
|
||||
}
|
||||
|
||||
/* -------------------------------------------------------------------------- */
|
||||
/* -------------------------------------------------------------------------- */
|
||||
|
||||
void InformationManager::timer_action()
|
||||
{
|
||||
static int mark = 0;
|
||||
|
||||
int rc;
|
||||
time_t thetime;
|
||||
ostringstream oss;
|
||||
|
||||
map<int, string> discovered_hosts;
|
||||
map<int, string>::iterator it;
|
||||
|
||||
const InformationManagerDriver * imd;
|
||||
|
||||
Host * host;
|
||||
istringstream iss;
|
||||
|
||||
mark = mark + timer_period;
|
||||
|
||||
if ( mark >= 600 )
|
||||
{
|
||||
Nebula::log("InM",Log::INFO,"--Mark--");
|
||||
mark = 0;
|
||||
}
|
||||
|
||||
rc = hpool->discover(&discovered_hosts);
|
||||
|
||||
if ((rc != 0) || (discovered_hosts.empty() == true))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
thetime = time(0);
|
||||
|
||||
for(it=discovered_hosts.begin();it!=discovered_hosts.end();it++)
|
||||
{
|
||||
host = hpool->get(it->first,true);
|
||||
|
||||
if (host == 0)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
Host::HostState state = host->get_state();
|
||||
|
||||
// TODO: Set apropriate threshold to timeout monitoring
|
||||
if (( state == Host::MONITORING) &&
|
||||
(thetime - host->get_last_monitored() >= 600))
|
||||
{
|
||||
host->set_state(Host::INIT);
|
||||
|
||||
hpool->update(host);
|
||||
}
|
||||
|
||||
if ((state != Host::MONITORING) && (state != Host::DISABLED) &&
|
||||
(thetime - host->get_last_monitored() >= monitor_period))
|
||||
{
|
||||
oss.str("");
|
||||
oss << "Monitoring host " << host->get_hostname()
|
||||
<< " (" << it->first << ")";
|
||||
Nebula::log("InM",Log::INFO,oss);
|
||||
|
||||
imd = get(it->second);
|
||||
|
||||
if (imd == 0)
|
||||
{
|
||||
oss.str("");
|
||||
oss << "Could not find information driver " << it->second;
|
||||
Nebula::log("InM",Log::ERROR,oss);
|
||||
|
||||
host->set_state(Host::ERROR);
|
||||
}
|
||||
else
|
||||
{
|
||||
imd->monitor(it->first,host->get_hostname());
|
||||
|
||||
host->set_state(Host::MONITORING);
|
||||
}
|
||||
|
||||
hpool->update(host);
|
||||
}
|
||||
|
||||
host->unlock();
|
||||
}
|
||||
}
|
179
src/im/InformationManagerDriver.cc
Normal file
179
src/im/InformationManagerDriver.cc
Normal file
@ -0,0 +1,179 @@
|
||||
/* -------------------------------------------------------------------------- */
|
||||
/* Copyright 2002-2008, Distributed Systems Architecture Group, Universidad */
|
||||
/* Complutense de Madrid (dsa-research.org) */
|
||||
/* */
|
||||
/* Licensed under the Apache License, Version 2.0 (the "License"); you may */
|
||||
/* not use this file except in compliance with the License. You may obtain */
|
||||
/* a copy of the License at */
|
||||
/* */
|
||||
/* http://www.apache.org/licenses/LICENSE-2.0 */
|
||||
/* */
|
||||
/* Unless required by applicable law or agreed to in writing, software */
|
||||
/* distributed under the License is distributed on an "AS IS" BASIS, */
|
||||
/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. */
|
||||
/* See the License for the specific language governing permissions and */
|
||||
/* limitations under the License. */
|
||||
/* -------------------------------------------------------------------------- */
|
||||
|
||||
#include "InformationManagerDriver.h"
|
||||
#include "Nebula.h"
|
||||
#include <sstream>
|
||||
|
||||
|
||||
/* ************************************************************************** */
|
||||
/* Driver ASCII Protocol Implementation */
|
||||
/* ************************************************************************** */
|
||||
|
||||
void InformationManagerDriver::monitor (
|
||||
const int oid,
|
||||
const string& host) const
|
||||
{
|
||||
ostringstream os;
|
||||
|
||||
os << "MONITOR " << oid << " " << host << endl;
|
||||
|
||||
write(os);
|
||||
};
|
||||
|
||||
/* -------------------------------------------------------------------------- */
|
||||
/* -------------------------------------------------------------------------- */
|
||||
|
||||
void InformationManagerDriver::protocol(
|
||||
string& message)
|
||||
{
|
||||
istringstream is(message);
|
||||
//stores the action name
|
||||
string action;
|
||||
//stores the action result
|
||||
string result;
|
||||
//stores the action id of the asociated HOSR
|
||||
int id;
|
||||
|
||||
ostringstream ess;
|
||||
string hinfo;
|
||||
Host * host;
|
||||
|
||||
// Parse the driver message
|
||||
|
||||
if ( is.good() )
|
||||
{
|
||||
is >> action >> ws;
|
||||
}
|
||||
else
|
||||
{
|
||||
goto error_parse;
|
||||
}
|
||||
|
||||
if ( is.good() )
|
||||
{
|
||||
is >> result >> ws;
|
||||
}
|
||||
else
|
||||
{
|
||||
goto error_parse;
|
||||
}
|
||||
|
||||
if ( is.good() )
|
||||
{
|
||||
is >> id >> ws;
|
||||
}
|
||||
else
|
||||
{
|
||||
goto error_parse;
|
||||
}
|
||||
|
||||
// -----------------------
|
||||
// Protocol implementation
|
||||
// -----------------------
|
||||
|
||||
if ( action == "MONITOR" )
|
||||
{
|
||||
host = hpool->get(id,true);
|
||||
|
||||
if ( host == 0 )
|
||||
{
|
||||
goto error_host;
|
||||
}
|
||||
|
||||
if (result == "SUCCESS")
|
||||
{
|
||||
size_t pos;
|
||||
int rc;
|
||||
|
||||
ostringstream oss;
|
||||
|
||||
getline (is,hinfo);
|
||||
|
||||
for (pos=hinfo.find(',');pos!=string::npos;pos=hinfo.find(','))
|
||||
{
|
||||
hinfo.replace(pos,1,"\n");
|
||||
}
|
||||
|
||||
hinfo += "\n";
|
||||
|
||||
oss << "Host " << id << " successfully monitored."; //, info: "<< hinfo;
|
||||
Nebula::log("InM",Log::DEBUG,oss);
|
||||
|
||||
rc = host->update_info(hinfo);
|
||||
|
||||
if (rc != 0)
|
||||
{
|
||||
goto error_parse_info;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
goto error_driver_info;
|
||||
}
|
||||
|
||||
host->touch(true);
|
||||
|
||||
hpool->update(host);
|
||||
|
||||
host->unlock();
|
||||
}
|
||||
|
||||
return;
|
||||
|
||||
error_driver_info:
|
||||
ess << "Error monitoring host " << id << " : " << is.str();
|
||||
Nebula::log("InM", Log::ERROR, ess);
|
||||
|
||||
goto error_common_info;
|
||||
|
||||
error_parse_info:
|
||||
ess << "Error parsing host information: " << hinfo;
|
||||
Nebula::log("InM",Log::ERROR,ess);
|
||||
|
||||
error_common_info:
|
||||
|
||||
host->touch(false);
|
||||
|
||||
hpool->update(host);
|
||||
|
||||
host->unlock();
|
||||
|
||||
return;
|
||||
|
||||
error_host:
|
||||
ess << "Could not get host " << id;
|
||||
Nebula::log("InM",Log::ERROR,ess);
|
||||
|
||||
return;
|
||||
|
||||
error_parse:
|
||||
|
||||
ess << "Error while parsing driver message: " << message;
|
||||
Nebula::log("InM",Log::ERROR,ess);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
/* -------------------------------------------------------------------------- */
|
||||
/* -------------------------------------------------------------------------- */
|
||||
|
||||
void InformationManagerDriver::recover()
|
||||
{
|
||||
Nebula::log("InM", Log::ERROR, "Information driver crashed, recovering...");
|
||||
}
|
||||
|
17
src/im/SConstruct
Executable file
17
src/im/SConstruct
Executable file
@ -0,0 +1,17 @@
|
||||
# SConstruct for src/im
|
||||
|
||||
Import('env')
|
||||
|
||||
lib_name='nebula_im'
|
||||
|
||||
# Sources to generate the library
|
||||
source_files=[
|
||||
'InformationManager.cc',
|
||||
'InformationManagerDriver.cc'
|
||||
]
|
||||
|
||||
test_names=[]
|
||||
|
||||
# Build library
|
||||
env.StaticLibrary(lib_name, source_files)
|
||||
|
3
src/im_mad/xen/architecture.sh
Executable file
3
src/im_mad/xen/architecture.sh
Executable file
@ -0,0 +1,3 @@
|
||||
#!/bin/sh
|
||||
|
||||
echo ARCH=`uname -m`
|
9
src/im_mad/xen/cpu.sh
Executable file
9
src/im_mad/xen/cpu.sh
Executable file
@ -0,0 +1,9 @@
|
||||
#!/bin/sh
|
||||
|
||||
if [ -f /proc/cpuinfo ]; then
|
||||
|
||||
echo -n "MODELNAME=\""
|
||||
grep -m 1 "model name" /proc/cpuinfo | cut -d: -f2 | sed -e 's/^ *//' | sed -e 's/$/"/'
|
||||
|
||||
fi
|
||||
|
5
src/im_mad/xen/name.sh
Executable file
5
src/im_mad/xen/name.sh
Executable file
@ -0,0 +1,5 @@
|
||||
#!/bin/sh
|
||||
|
||||
echo HOSTNAME=`uname -n`
|
||||
|
||||
|
19
src/im_mad/xen/one_im_ssh
Executable file
19
src/im_mad/xen/one_im_ssh
Executable file
@ -0,0 +1,19 @@
|
||||
#!/bin/bash
|
||||
|
||||
if [ -z "${ONE_LOCATION}" ]; then
|
||||
echo "Please, set ONE_LOCATION variable."
|
||||
exit -1
|
||||
fi
|
||||
|
||||
. $ONE_LOCATION/libexec/madcommon.sh
|
||||
|
||||
# Export the vmm_mad specific rc
|
||||
export_rc_vars $ONE_LOCATION/etc/mad/im_sshrc
|
||||
|
||||
# Go to ONE_LOCATION
|
||||
cd $ONE_LOCATION
|
||||
|
||||
# Execute the actual MAD
|
||||
execute_mad $*
|
||||
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user