Hi,
when i enter the executers node in the console tree a exception occurs.
After debugging the console and the manager i found the causing code lines.
The used code scheme in
trunk/alchemi-devel/src/Alchemi.Manager/Storage/GenericManagerDatabaseStorag
e.cs
<variable_name> = dataReader.GetXXX(dataReader.GetOrdinal("field_name"));
lead to exceptions when the field_name doesn't exist.
My solution is safer and better maintable and works fine.
The second affect file is
"trunk/alchemi-devel/src/Alchemi.Core/Manager/Storage/ExecutorStorageView.cs
" where i placed a new blank constructor and changed 3 readonly properties
to writable to achive this functionality.
stefan
here are the patchs:
Index:
trunk/alchemi-devel/src/Alchemi.Core/Manager/Storage/ExecutorStorageView.cs
===================================================================
---
trunk/alchemi-devel/src/Alchemi.Core/Manager/Storage/ExecutorStorageView.cs
(Revision 314)
+++
trunk/alchemi-devel/src/Alchemi.Core/Manager/Storage/ExecutorStorageView.cs
(Arbeitskopie)
@@ -201,6 +201,7 @@
public string Username
{
get { return _username; }
+ set { _username = value;}
}
#endregion
@@ -213,6 +214,7 @@
public int MaxCpu
{
get { return _maxCpu; }
+ set { _maxCpu = value;}
}
#endregion
@@ -535,7 +537,30 @@
NumberOfCpu = numberOfCpu;
OS = os;
Architecture = architecture;
- }
+ }
+
+ /// <summary>
+ /// ExecutorStorageView constructor.
+ /// </summary>
+ public ExecutorStorageView()
+ {
+ _executorId = "";
+ _dedicated = false;
+ _connected = false;
+ _pingTime = System.DateTime.MinValue;
+ _hostname = "";
+ _port = 0;
+ _username = "";
+ _maxCpu = 0;
+ _cpuUsage = 0;
+ _availableCpu = 0;
+ _totalCpuUsage = 0;
+ _maxMemory = 0;
+ _maxDisk = 0;
+ _numberOfCpu = 0;
+ _os = "";
+ _architecture = "";
+ }
#endregion
}
Index:
trunk/alchemi-devel/src/Alchemi.Manager/Storage/GenericManagerDatabaseStorag
e.cs
===================================================================
---
trunk/alchemi-devel/src/Alchemi.Manager/Storage/GenericManagerDatabaseStorag
e.cs (Revision 314)
+++
trunk/alchemi-devel/src/Alchemi.Manager/Storage/GenericManagerDatabaseStorag
e.cs (Arbeitskopie)
@@ -810,58 +810,95 @@
private ExecutorStorageView[]
DecodeExecutorFromDataReader(IDataReader
dataReader)
{
- ArrayList executors = new ArrayList();
+ ArrayList executors = new ArrayList();
+ int iIndex = 0;
+ using (dataReader)
+ {
+ while (dataReader.Read())
+ {
+ ExecutorStorageView executor = new
ExecutorStorageView();
- using(dataReader)
- {
- while(dataReader.Read())
- {
- // in SQL the executor ID is stored as
a GUID so we use GetValue
instead of GetString in order to maximize compatibility with other databases
- string executorId =
dataReader.GetValue(dataReader.GetOrdinal("executor_id")).ToString();
+ for (iIndex = 0; iIndex < dataReader.FieldCount;
++iIndex)
+ {
+ if (!dataReader.IsDBNull(iIndex))
+ {
+ switch (dataReader.GetName(iIndex))
+ {
+ // in SQL the executor ID is stored as a
GUID so we use GetValue instead of GetString in order to maximize
compatibility with other databases
+ case "executor_id":
+ executor.ExecutorId =
dataReader.GetValue(iIndex).ToString();
+ break;
- bool dedicated =
dataReader.GetBoolean(dataReader.GetOrdinal("is_dedicated"));
- bool connected =
dataReader.GetBoolean(dataReader.GetOrdinal("is_connected"));
- DateTime pingTime =
GetDateTime(dataReader, "ping_time");
- string hostname =
dataReader.GetString(dataReader.GetOrdinal("host"));
- int port =
dataReader.IsDBNull(dataReader.GetOrdinal("port")) ? 0 :
dataReader.GetInt32(dataReader.GetOrdinal("port"));
- string username =
dataReader.GetString(dataReader.GetOrdinal("usr_name"));
- int maxCpu =
dataReader.IsDBNull(dataReader.GetOrdinal("cpu_max")) ? 0
: dataReader.GetInt32(dataReader.GetOrdinal("cpu_max"));
- int cpuUsage =
dataReader.IsDBNull(dataReader.GetOrdinal("cpu_usage"))
? 0 : dataReader.GetInt32(dataReader.GetOrdinal("cpu_usage"));
- int availableCpu =
dataReader.IsDBNull(dataReader.GetOrdinal("cpu_avail")) ? 0 :
dataReader.GetInt32(dataReader.GetOrdinal("cpu_avail"));
- float totalCpuUsage =
dataReader.IsDBNull(dataReader.GetOrdinal("cpu_totalusage")) ? 0 :
(float)dataReader.GetDouble(dataReader.GetOrdinal("cpu_totalusage"));
+ case "is_dedicated":
+ executor.Dedicated =
dataReader.GetBoolean(iIndex);
+ break;
- float maxMemory =
dataReader.IsDBNull(dataReader.GetOrdinal("mem_max")) ? 0 :
(float)dataReader.GetDouble(dataReader.GetOrdinal("mem_max"));;
- float maxDisk =
dataReader.IsDBNull(dataReader.GetOrdinal("disk_max"))
? 0 : (float)dataReader.GetDouble(dataReader.GetOrdinal("disk_max"));
- int numberOfCpu =
dataReader.IsDBNull(dataReader.GetOrdinal("num_cpus")) ? 0 :
dataReader.GetInt32(dataReader.GetOrdinal("num_cpus"));
- string os =
dataReader.IsDBNull(dataReader.GetOrdinal("os")) ? "" :
dataReader.GetString(dataReader.GetOrdinal("os"));
- string architecture =
dataReader.IsDBNull(dataReader.GetOrdinal("arch")) ? "" :
dataReader.GetString(dataReader.GetOrdinal("arch"));
+ case "is_connected":
+ executor.Connected =
dataReader.GetBoolean(iIndex);
+ break;
- ExecutorStorageView executor = new
ExecutorStorageView(
- executorId,
- dedicated,
- connected,
- pingTime,
- hostname,
- port,
- username,
- maxCpu,
- cpuUsage,
- availableCpu,
- totalCpuUsage,
- maxMemory,
- maxDisk,
- numberOfCpu,
- os,
- architecture
- );
+ case "ping_time":
+ executor.PingTime =
dataReader.GetDateTime(iIndex);
+ break;
- executors.Add(executor);
- }
+ case "host":
+ executor.HostName =
dataReader.GetString(iIndex);
+ break;
- dataReader.Close();
- }
+ case "port":
+ executor.Port =
dataReader.GetInt32(iIndex);
+ break;
- return
(ExecutorStorageView[])executors.ToArray(typeof(ExecutorStorageView));
+ case "usr_name":
+ executor.Username =
dataReader.GetString(iIndex);
+ break;
+
+ case "cpu_max":
+ executor.MaxCpu =
dataReader.GetInt32(iIndex);
+ break;
+
+ case "cpu_usage":
+ executor.CpuUsage =
dataReader.GetInt32(iIndex);
+ break;
+
+ case "cpu_avail":
+ executor.AvailableCpu =
dataReader.GetInt32(iIndex);
+ break;
+
+ case "cpu_totalusage":
+ executor.TotalCpuUsage =
(float)dataReader.GetDouble(iIndex);
+ break;
+
+ case "mem_max":
+ executor.MaxMemory =
(float)dataReader.GetDouble(iIndex);
+ break;
+
+ case "disk_max":
+ executor.MaxDisk =
(float)dataReader.GetDouble(iIndex);
+ break;
+
+ case "num_cpus":
+ executor.NumberOfCpu =
dataReader.GetInt32(iIndex);
+ break;
+
+ case "os":
+ executor.OS =
dataReader.GetString(iIndex);
+ break;
+
+ case "arch":
+ executor.Architecture =
dataReader.GetString(iIndex);
+ break;
+ } //switch
+ } //if
+ } //for
+
+ executors.Add(executor);
+ }
+
+ dataReader.Close();
+ }
+
+ return
(ExecutorStorageView[])executors.ToArray(typeof(ExecutorStorageView));
}
public string AddApplication(ApplicationStorageView application)
******* Diese Email wurde gesendet von der ********
Laser- und Medizin-Technologie GmbH, Berlin
(gemeinnuetzig nach ยง52 AO)
Fabeckstr. 60 - 62, 14195 Berlin
Telefon: +49 (0)30 8449 23 - 0
Fax: +49 (0)30 8449 23 - 99
Handelsregister: Berlin 97 HRB 23 655
Homepage: www.LMTB.de
Vorsitzender des Aufsichtsrats: Dr. Frank Frank
Geschaeftsfuehrung: Dr. H. Albrecht
Prof. Dr.-Ing. H. J. Eichler
***************************************************
-------------------------------------------------------------------------
Sponsored by: SourceForge.net Community Choice Awards: VOTE NOW!
Studies have shown that voting for your favorite open source project,
along with a healthy diet, reduces your potential for chronic lameness
and boredom. Vote Now at http://www.sourceforge.net/community/cca08
_______________________________________________
Alchemi-developers mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/alchemi-developers