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

Reply via email to