diff options
Diffstat (limited to 'OpenSim/Framework/Data.MySQL')
-rw-r--r-- | OpenSim/Framework/Data.MySQL/MySQLAssetData.cs | 18 | ||||
-rw-r--r-- | OpenSim/Framework/Data.MySQL/MySQLDataStore.cs | 74 | ||||
-rw-r--r-- | OpenSim/Framework/Data.MySQL/MySQLGridData.cs | 14 | ||||
-rw-r--r-- | OpenSim/Framework/Data.MySQL/MySQLInventoryData.cs | 34 | ||||
-rw-r--r-- | OpenSim/Framework/Data.MySQL/MySQLManager.cs | 18 | ||||
-rw-r--r-- | OpenSim/Framework/Data.MySQL/MySQLUserData.cs | 28 |
6 files changed, 99 insertions, 87 deletions
diff --git a/OpenSim/Framework/Data.MySQL/MySQLAssetData.cs b/OpenSim/Framework/Data.MySQL/MySQLAssetData.cs index 407d6d2..f9ef699 100644 --- a/OpenSim/Framework/Data.MySQL/MySQLAssetData.cs +++ b/OpenSim/Framework/Data.MySQL/MySQLAssetData.cs | |||
@@ -37,6 +37,8 @@ namespace OpenSim.Framework.Data.MySQL | |||
37 | { | 37 | { |
38 | internal class MySQLAssetData : IAssetProvider | 38 | internal class MySQLAssetData : IAssetProvider |
39 | { | 39 | { |
40 | private static readonly log4net.ILog m_log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); | ||
41 | |||
40 | private MySQLManager _dbConnection; | 42 | private MySQLManager _dbConnection; |
41 | 43 | ||
42 | #region IAssetProvider Members | 44 | #region IAssetProvider Members |
@@ -46,7 +48,7 @@ namespace OpenSim.Framework.Data.MySQL | |||
46 | // null as the version, indicates that the table didn't exist | 48 | // null as the version, indicates that the table didn't exist |
47 | if (oldVersion == null) | 49 | if (oldVersion == null) |
48 | { | 50 | { |
49 | MainLog.Instance.Notice("ASSETS", "Creating new database tables"); | 51 | m_log.Info("[ASSETS]: Creating new database tables"); |
50 | _dbConnection.ExecuteResourceSql("CreateAssetsTable.sql"); | 52 | _dbConnection.ExecuteResourceSql("CreateAssetsTable.sql"); |
51 | return; | 53 | return; |
52 | } | 54 | } |
@@ -98,9 +100,9 @@ namespace OpenSim.Framework.Data.MySQL | |||
98 | } | 100 | } |
99 | catch (Exception e) | 101 | catch (Exception e) |
100 | { | 102 | { |
101 | MainLog.Instance.Error( | 103 | m_log.Error(String.Format( |
102 | "ASSETS", "MySql failure fetching asset {0}" + Environment.NewLine + e.ToString() | 104 | "[ASSETS]: MySql failure fetching asset {0}" + Environment.NewLine + e.ToString() |
103 | + Environment.NewLine + "Attempting reconnection", assetID); | 105 | + Environment.NewLine + "Attempting reconnection", assetID)); |
104 | _dbConnection.Reconnect(); | 106 | _dbConnection.Reconnect(); |
105 | } | 107 | } |
106 | } | 108 | } |
@@ -137,10 +139,10 @@ namespace OpenSim.Framework.Data.MySQL | |||
137 | } | 139 | } |
138 | catch (Exception e) | 140 | catch (Exception e) |
139 | { | 141 | { |
140 | MainLog.Instance.Error( | 142 | m_log.Error(String.Format( |
141 | "ASSETS", | 143 | "[ASSETS]: " + |
142 | "MySql failure creating asset {0} with name {1}" + Environment.NewLine + e.ToString() | 144 | "MySql failure creating asset {0} with name {1}" + Environment.NewLine + e.ToString() |
143 | + Environment.NewLine + "Attempting reconnection", asset.FullID, asset.Name); | 145 | + Environment.NewLine + "Attempting reconnection", asset.FullID, asset.Name)); |
144 | _dbConnection.Reconnect(); | 146 | _dbConnection.Reconnect(); |
145 | } | 147 | } |
146 | } | 148 | } |
diff --git a/OpenSim/Framework/Data.MySQL/MySQLDataStore.cs b/OpenSim/Framework/Data.MySQL/MySQLDataStore.cs index 54f39bb..e2ea018 100644 --- a/OpenSim/Framework/Data.MySQL/MySQLDataStore.cs +++ b/OpenSim/Framework/Data.MySQL/MySQLDataStore.cs | |||
@@ -42,6 +42,8 @@ namespace OpenSim.Framework.Data.MySQL | |||
42 | { | 42 | { |
43 | public class MySQLDataStore : IRegionDataStore | 43 | public class MySQLDataStore : IRegionDataStore |
44 | { | 44 | { |
45 | private static readonly log4net.ILog m_log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); | ||
46 | |||
45 | private const string m_primSelect = "select * from prims"; | 47 | private const string m_primSelect = "select * from prims"; |
46 | private const string m_shapeSelect = "select * from primshapes"; | 48 | private const string m_shapeSelect = "select * from primshapes"; |
47 | private const string m_itemsSelect = "select * from primitems"; | 49 | private const string m_itemsSelect = "select * from primitems"; |
@@ -80,7 +82,7 @@ namespace OpenSim.Framework.Data.MySQL | |||
80 | m_dataSet = new DataSet(); | 82 | m_dataSet = new DataSet(); |
81 | this.persistPrimInventories = persistPrimInventories; | 83 | this.persistPrimInventories = persistPrimInventories; |
82 | 84 | ||
83 | MainLog.Instance.Verbose("DATASTORE", "MySql - connecting: " + connectionstring); | 85 | m_log.Info("[DATASTORE]: MySql - connecting: " + connectionstring); |
84 | m_connection = new MySqlConnection(connectionstring); | 86 | m_connection = new MySqlConnection(connectionstring); |
85 | 87 | ||
86 | MySqlCommand primSelectCmd = new MySqlCommand(m_primSelect, m_connection); | 88 | MySqlCommand primSelectCmd = new MySqlCommand(m_primSelect, m_connection); |
@@ -148,12 +150,12 @@ namespace OpenSim.Framework.Data.MySQL | |||
148 | { | 150 | { |
149 | if ((prim.ObjectFlags & (uint) LLObject.ObjectFlags.Physics) == 0) | 151 | if ((prim.ObjectFlags & (uint) LLObject.ObjectFlags.Physics) == 0) |
150 | { | 152 | { |
151 | MainLog.Instance.Verbose("DATASTORE", "Adding obj: " + obj.UUID + " to region: " + regionUUID); | 153 | m_log.Info("[DATASTORE]: Adding obj: " + obj.UUID + " to region: " + regionUUID); |
152 | addPrim(prim, obj.UUID, regionUUID); | 154 | addPrim(prim, obj.UUID, regionUUID); |
153 | } | 155 | } |
154 | else | 156 | else |
155 | { | 157 | { |
156 | // MainLog.Instance.Verbose("DATASTORE", "Ignoring Physical obj: " + obj.UUID + " in region: " + regionUUID); | 158 | // m_log.Info("[DATASTORE]: Ignoring Physical obj: " + obj.UUID + " in region: " + regionUUID); |
157 | } | 159 | } |
158 | } | 160 | } |
159 | } | 161 | } |
@@ -163,7 +165,7 @@ namespace OpenSim.Framework.Data.MySQL | |||
163 | 165 | ||
164 | public void RemoveObject(LLUUID obj, LLUUID regionUUID) | 166 | public void RemoveObject(LLUUID obj, LLUUID regionUUID) |
165 | { | 167 | { |
166 | MainLog.Instance.Verbose("DATASTORE", "Removing obj: {0} from region: {1}", obj.UUID, regionUUID); | 168 | m_log.Info(String.Format("[DATASTORE]: Removing obj: {0} from region: {1}", obj.UUID, regionUUID)); |
167 | 169 | ||
168 | DataTable prims = m_primTable; | 170 | DataTable prims = m_primTable; |
169 | DataTable shapes = m_shapeTable; | 171 | DataTable shapes = m_shapeTable; |
@@ -228,7 +230,7 @@ namespace OpenSim.Framework.Data.MySQL | |||
228 | lock (m_dataSet) | 230 | lock (m_dataSet) |
229 | { | 231 | { |
230 | DataRow[] primsForRegion = prims.Select(byRegion, orderByParent); | 232 | DataRow[] primsForRegion = prims.Select(byRegion, orderByParent); |
231 | MainLog.Instance.Verbose("DATASTORE", | 233 | m_log.Info("[DATASTORE]: " + |
232 | "Loaded " + primsForRegion.Length + " prims for region: " + regionUUID); | 234 | "Loaded " + primsForRegion.Length + " prims for region: " + regionUUID); |
233 | 235 | ||
234 | foreach (DataRow primRow in primsForRegion) | 236 | foreach (DataRow primRow in primsForRegion) |
@@ -251,7 +253,7 @@ namespace OpenSim.Framework.Data.MySQL | |||
251 | } | 253 | } |
252 | else | 254 | else |
253 | { | 255 | { |
254 | MainLog.Instance.Notice( | 256 | m_log.Info( |
255 | "No shape found for prim in storage, so setting default box shape"); | 257 | "No shape found for prim in storage, so setting default box shape"); |
256 | prim.Shape = PrimitiveBaseShape.Default; | 258 | prim.Shape = PrimitiveBaseShape.Default; |
257 | } | 259 | } |
@@ -270,7 +272,7 @@ namespace OpenSim.Framework.Data.MySQL | |||
270 | } | 272 | } |
271 | else | 273 | else |
272 | { | 274 | { |
273 | MainLog.Instance.Notice( | 275 | m_log.Info( |
274 | "No shape found for prim in storage, so setting default box shape"); | 276 | "No shape found for prim in storage, so setting default box shape"); |
275 | prim.Shape = PrimitiveBaseShape.Default; | 277 | prim.Shape = PrimitiveBaseShape.Default; |
276 | } | 278 | } |
@@ -284,11 +286,11 @@ namespace OpenSim.Framework.Data.MySQL | |||
284 | } | 286 | } |
285 | catch (Exception e) | 287 | catch (Exception e) |
286 | { | 288 | { |
287 | MainLog.Instance.Error("DATASTORE", "Failed create prim object, exception and data follows"); | 289 | m_log.Error("[DATASTORE]: Failed create prim object, exception and data follows"); |
288 | MainLog.Instance.Verbose("DATASTORE", e.ToString()); | 290 | m_log.Info("[DATASTORE]: " + e.ToString()); |
289 | foreach (DataColumn col in prims.Columns) | 291 | foreach (DataColumn col in prims.Columns) |
290 | { | 292 | { |
291 | MainLog.Instance.Verbose("DATASTORE", "Col: " + col.ColumnName + " => " + primRow[col]); | 293 | m_log.Info("[DATASTORE]: Col: " + col.ColumnName + " => " + primRow[col]); |
292 | } | 294 | } |
293 | } | 295 | } |
294 | } | 296 | } |
@@ -302,7 +304,7 @@ namespace OpenSim.Framework.Data.MySQL | |||
302 | /// <param name="prim"></param> | 304 | /// <param name="prim"></param> |
303 | private void LoadItems(SceneObjectPart prim) | 305 | private void LoadItems(SceneObjectPart prim) |
304 | { | 306 | { |
305 | //MainLog.Instance.Verbose("DATASTORE", "Loading inventory for {0}, {1}", prim.Name, prim.UUID); | 307 | //m_log.Info(String.Format("[DATASTORE]: Loading inventory for {0}, {1}", prim.Name, prim.UUID)); |
306 | 308 | ||
307 | DataTable dbItems = m_itemsTable; | 309 | DataTable dbItems = m_itemsTable; |
308 | 310 | ||
@@ -316,7 +318,7 @@ namespace OpenSim.Framework.Data.MySQL | |||
316 | TaskInventoryItem item = buildItem(row); | 318 | TaskInventoryItem item = buildItem(row); |
317 | inventory.Add(item); | 319 | inventory.Add(item); |
318 | 320 | ||
319 | MainLog.Instance.Verbose("DATASTORE", "Restored item {0}, {1}", item.Name, item.ItemID); | 321 | m_log.Info(String.Format("[DATASTORE]: Restored item {0}, {1}", item.Name, item.ItemID)); |
320 | } | 322 | } |
321 | 323 | ||
322 | prim.RestoreInventoryItems(inventory); | 324 | prim.RestoreInventoryItems(inventory); |
@@ -332,7 +334,7 @@ namespace OpenSim.Framework.Data.MySQL | |||
332 | public void StoreTerrain(double[,] ter, LLUUID regionID) | 334 | public void StoreTerrain(double[,] ter, LLUUID regionID) |
333 | { | 335 | { |
334 | int revision = Util.UnixTimeSinceEpoch(); | 336 | int revision = Util.UnixTimeSinceEpoch(); |
335 | MainLog.Instance.Verbose("DATASTORE", "Storing terrain revision r" + revision.ToString()); | 337 | m_log.Info("[DATASTORE]: Storing terrain revision r" + revision.ToString()); |
336 | 338 | ||
337 | DataTable terrain = m_dataSet.Tables["terrain"]; | 339 | DataTable terrain = m_dataSet.Tables["terrain"]; |
338 | lock (m_dataSet) | 340 | lock (m_dataSet) |
@@ -384,11 +386,11 @@ namespace OpenSim.Framework.Data.MySQL | |||
384 | } | 386 | } |
385 | else | 387 | else |
386 | { | 388 | { |
387 | MainLog.Instance.Verbose("DATASTORE", "No terrain found for region"); | 389 | m_log.Info("[DATASTORE]: No terrain found for region"); |
388 | return null; | 390 | return null; |
389 | } | 391 | } |
390 | 392 | ||
391 | MainLog.Instance.Verbose("DATASTORE", "Loaded terrain revision r" + rev.ToString()); | 393 | m_log.Info("[DATASTORE]: Loaded terrain revision r" + rev.ToString()); |
392 | } | 394 | } |
393 | 395 | ||
394 | return terret; | 396 | return terret; |
@@ -418,7 +420,7 @@ namespace OpenSim.Framework.Data.MySQL | |||
418 | public void StoreLandObject(Land parcel, LLUUID regionUUID) | 420 | public void StoreLandObject(Land parcel, LLUUID regionUUID) |
419 | { | 421 | { |
420 | // Does the new locking fix it? | 422 | // Does the new locking fix it? |
421 | MainLog.Instance.Verbose("DATASTORE", "Tedds temp fix: Waiting 3 seconds for stuff to catch up. (Someone please fix! :))"); | 423 | m_log.Info("[DATASTORE]: Tedds temp fix: Waiting 3 seconds for stuff to catch up. (Someone please fix! :))"); |
422 | System.Threading.Thread.Sleep(2500 + rnd.Next(300, 900)); | 424 | System.Threading.Thread.Sleep(2500 + rnd.Next(300, 900)); |
423 | 425 | ||
424 | lock (m_dataSet) | 426 | lock (m_dataSet) |
@@ -1214,7 +1216,7 @@ namespace OpenSim.Framework.Data.MySQL | |||
1214 | if (!persistPrimInventories) | 1216 | if (!persistPrimInventories) |
1215 | return; | 1217 | return; |
1216 | 1218 | ||
1217 | MainLog.Instance.Verbose("DATASTORE", "Persisting Prim Inventory with prim ID {0}", primID); | 1219 | m_log.Info(String.Format("[DATASTORE]: Persisting Prim Inventory with prim ID {0}", primID)); |
1218 | 1220 | ||
1219 | // For now, we're just going to crudely remove all the previous inventory items | 1221 | // For now, we're just going to crudely remove all the previous inventory items |
1220 | // no matter whether they have changed or not, and replace them with the current set. | 1222 | // no matter whether they have changed or not, and replace them with the current set. |
@@ -1225,10 +1227,10 @@ namespace OpenSim.Framework.Data.MySQL | |||
1225 | // repalce with current inventory details | 1227 | // repalce with current inventory details |
1226 | foreach (TaskInventoryItem newItem in items) | 1228 | foreach (TaskInventoryItem newItem in items) |
1227 | { | 1229 | { |
1228 | // MainLog.Instance.Verbose( | 1230 | // m_log.Info(String.Format( |
1229 | // "DATASTORE", | 1231 | // "[DATASTORE]: " + |
1230 | // "Adding item {0}, {1} to prim ID {2}", | 1232 | // "Adding item {0}, {1} to prim ID {2}", |
1231 | // newItem.Name, newItem.ItemID, newItem.ParentPartID); | 1233 | // newItem.Name, newItem.ItemID, newItem.ParentPartID)); |
1232 | 1234 | ||
1233 | DataRow newItemRow = m_itemsTable.NewRow(); | 1235 | DataRow newItemRow = m_itemsTable.NewRow(); |
1234 | fillItemRow(newItemRow, newItem); | 1236 | fillItemRow(newItemRow, newItem); |
@@ -1332,7 +1334,7 @@ namespace OpenSim.Framework.Data.MySQL | |||
1332 | sql += subsql; | 1334 | sql += subsql; |
1333 | sql += ")"; | 1335 | sql += ")"; |
1334 | 1336 | ||
1335 | //MainLog.Instance.Verbose("DATASTORE", "defineTable() sql {0}", sql); | 1337 | //m_log.Info(String.Format("[DATASTORE]: defineTable() sql {0}", sql)); |
1336 | 1338 | ||
1337 | return sql; | 1339 | return sql; |
1338 | } | 1340 | } |
@@ -1463,8 +1465,8 @@ namespace OpenSim.Framework.Data.MySQL | |||
1463 | } | 1465 | } |
1464 | catch (Exception ex) | 1466 | catch (Exception ex) |
1465 | { | 1467 | { |
1466 | MainLog.Instance.Error("MySql", "Error connecting to MySQL server: " + ex.Message); | 1468 | m_log.Error("[MySql]: Error connecting to MySQL server: " + ex.Message); |
1467 | MainLog.Instance.Error("MySql", "Application is terminating!"); | 1469 | m_log.Error("[MySql]: Application is terminating!"); |
1468 | System.Threading.Thread.CurrentThread.Abort(); | 1470 | System.Threading.Thread.CurrentThread.Abort(); |
1469 | } | 1471 | } |
1470 | } | 1472 | } |
@@ -1475,7 +1477,7 @@ namespace OpenSim.Framework.Data.MySQL | |||
1475 | } | 1477 | } |
1476 | catch (MySqlException e) | 1478 | catch (MySqlException e) |
1477 | { | 1479 | { |
1478 | MainLog.Instance.Warn("MySql", "Primitives Table Already Exists: {0}", e); | 1480 | m_log.Warn(String.Format("[MySql]: Primitives Table Already Exists: {0}", e)); |
1479 | } | 1481 | } |
1480 | 1482 | ||
1481 | try | 1483 | try |
@@ -1484,7 +1486,7 @@ namespace OpenSim.Framework.Data.MySQL | |||
1484 | } | 1486 | } |
1485 | catch (MySqlException e) | 1487 | catch (MySqlException e) |
1486 | { | 1488 | { |
1487 | MainLog.Instance.Warn("MySql", "Shapes Table Already Exists: {0}", e); | 1489 | m_log.Warn(String.Format("[MySql]: Shapes Table Already Exists: {0}", e)); |
1488 | } | 1490 | } |
1489 | 1491 | ||
1490 | try | 1492 | try |
@@ -1493,7 +1495,7 @@ namespace OpenSim.Framework.Data.MySQL | |||
1493 | } | 1495 | } |
1494 | catch (MySqlException e) | 1496 | catch (MySqlException e) |
1495 | { | 1497 | { |
1496 | MainLog.Instance.Warn("MySql", "Items Table Already Exists: {0}", e); | 1498 | m_log.Warn(String.Format("[MySql]: Items Table Already Exists: {0}", e)); |
1497 | } | 1499 | } |
1498 | 1500 | ||
1499 | try | 1501 | try |
@@ -1502,7 +1504,7 @@ namespace OpenSim.Framework.Data.MySQL | |||
1502 | } | 1504 | } |
1503 | catch (MySqlException e) | 1505 | catch (MySqlException e) |
1504 | { | 1506 | { |
1505 | MainLog.Instance.Warn("MySql", "Terrain Table Already Exists: {0}", e); | 1507 | m_log.Warn(String.Format("[MySql]: Terrain Table Already Exists: {0}", e)); |
1506 | } | 1508 | } |
1507 | 1509 | ||
1508 | try | 1510 | try |
@@ -1511,7 +1513,7 @@ namespace OpenSim.Framework.Data.MySQL | |||
1511 | } | 1513 | } |
1512 | catch (MySqlException e) | 1514 | catch (MySqlException e) |
1513 | { | 1515 | { |
1514 | MainLog.Instance.Warn("MySql", "Land Table Already Exists: {0}", e); | 1516 | m_log.Warn(String.Format("[MySql]: Land Table Already Exists: {0}", e)); |
1515 | } | 1517 | } |
1516 | 1518 | ||
1517 | try | 1519 | try |
@@ -1520,7 +1522,7 @@ namespace OpenSim.Framework.Data.MySQL | |||
1520 | } | 1522 | } |
1521 | catch (MySqlException e) | 1523 | catch (MySqlException e) |
1522 | { | 1524 | { |
1523 | MainLog.Instance.Warn("MySql", "LandAccessList Table Already Exists: {0}", e); | 1525 | m_log.Warn(String.Format("[MySql]: LandAccessList Table Already Exists: {0}", e)); |
1524 | } | 1526 | } |
1525 | conn.Close(); | 1527 | conn.Close(); |
1526 | } | 1528 | } |
@@ -1555,7 +1557,7 @@ namespace OpenSim.Framework.Data.MySQL | |||
1555 | } | 1557 | } |
1556 | catch (MySqlException) | 1558 | catch (MySqlException) |
1557 | { | 1559 | { |
1558 | MainLog.Instance.Verbose("DATASTORE", "MySql Database doesn't exist... creating"); | 1560 | m_log.Info("[DATASTORE]: MySql Database doesn't exist... creating"); |
1559 | InitDB(conn); | 1561 | InitDB(conn); |
1560 | } | 1562 | } |
1561 | 1563 | ||
@@ -1573,7 +1575,7 @@ namespace OpenSim.Framework.Data.MySQL | |||
1573 | { | 1575 | { |
1574 | if (!tmpDS.Tables["prims"].Columns.Contains(col.ColumnName)) | 1576 | if (!tmpDS.Tables["prims"].Columns.Contains(col.ColumnName)) |
1575 | { | 1577 | { |
1576 | MainLog.Instance.Verbose("DATASTORE", "Missing required column:" + col.ColumnName); | 1578 | m_log.Info("[DATASTORE]: Missing required column:" + col.ColumnName); |
1577 | return false; | 1579 | return false; |
1578 | } | 1580 | } |
1579 | } | 1581 | } |
@@ -1582,7 +1584,7 @@ namespace OpenSim.Framework.Data.MySQL | |||
1582 | { | 1584 | { |
1583 | if (!tmpDS.Tables["primshapes"].Columns.Contains(col.ColumnName)) | 1585 | if (!tmpDS.Tables["primshapes"].Columns.Contains(col.ColumnName)) |
1584 | { | 1586 | { |
1585 | MainLog.Instance.Verbose("DATASTORE", "Missing required column:" + col.ColumnName); | 1587 | m_log.Info("[DATASTORE]: Missing required column:" + col.ColumnName); |
1586 | return false; | 1588 | return false; |
1587 | } | 1589 | } |
1588 | } | 1590 | } |
@@ -1593,7 +1595,7 @@ namespace OpenSim.Framework.Data.MySQL | |||
1593 | { | 1595 | { |
1594 | if (!tmpDS.Tables["terrain"].Columns.Contains(col.ColumnName)) | 1596 | if (!tmpDS.Tables["terrain"].Columns.Contains(col.ColumnName)) |
1595 | { | 1597 | { |
1596 | MainLog.Instance.Verbose("DATASTORE", "Missing require column:" + col.ColumnName); | 1598 | m_log.Info("[DATASTORE]: Missing require column:" + col.ColumnName); |
1597 | return false; | 1599 | return false; |
1598 | } | 1600 | } |
1599 | } | 1601 | } |
@@ -1602,7 +1604,7 @@ namespace OpenSim.Framework.Data.MySQL | |||
1602 | { | 1604 | { |
1603 | if (!tmpDS.Tables["land"].Columns.Contains(col.ColumnName)) | 1605 | if (!tmpDS.Tables["land"].Columns.Contains(col.ColumnName)) |
1604 | { | 1606 | { |
1605 | MainLog.Instance.Verbose("DATASTORE", "Missing require column:" + col.ColumnName); | 1607 | m_log.Info("[DATASTORE]: Missing require column:" + col.ColumnName); |
1606 | return false; | 1608 | return false; |
1607 | } | 1609 | } |
1608 | } | 1610 | } |
@@ -1611,7 +1613,7 @@ namespace OpenSim.Framework.Data.MySQL | |||
1611 | { | 1613 | { |
1612 | if (!tmpDS.Tables["landaccesslist"].Columns.Contains(col.ColumnName)) | 1614 | if (!tmpDS.Tables["landaccesslist"].Columns.Contains(col.ColumnName)) |
1613 | { | 1615 | { |
1614 | MainLog.Instance.Verbose("DATASTORE", "Missing require column:" + col.ColumnName); | 1616 | m_log.Info("[DATASTORE]: Missing require column:" + col.ColumnName); |
1615 | return false; | 1617 | return false; |
1616 | } | 1618 | } |
1617 | } | 1619 | } |
diff --git a/OpenSim/Framework/Data.MySQL/MySQLGridData.cs b/OpenSim/Framework/Data.MySQL/MySQLGridData.cs index c8c4ab0..d62c286 100644 --- a/OpenSim/Framework/Data.MySQL/MySQLGridData.cs +++ b/OpenSim/Framework/Data.MySQL/MySQLGridData.cs | |||
@@ -42,6 +42,8 @@ namespace OpenSim.Framework.Data.MySQL | |||
42 | /// </summary> | 42 | /// </summary> |
43 | public class MySQLGridData : IGridData | 43 | public class MySQLGridData : IGridData |
44 | { | 44 | { |
45 | private static readonly log4net.ILog m_log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); | ||
46 | |||
45 | /// <summary> | 47 | /// <summary> |
46 | /// MySQL Database Manager | 48 | /// MySQL Database Manager |
47 | /// </summary> | 49 | /// </summary> |
@@ -168,7 +170,7 @@ namespace OpenSim.Framework.Data.MySQL | |||
168 | catch (Exception e) | 170 | catch (Exception e) |
169 | { | 171 | { |
170 | database.Reconnect(); | 172 | database.Reconnect(); |
171 | MainLog.Instance.Error(e.ToString()); | 173 | m_log.Error(e.ToString()); |
172 | return null; | 174 | return null; |
173 | } | 175 | } |
174 | } | 176 | } |
@@ -200,7 +202,7 @@ namespace OpenSim.Framework.Data.MySQL | |||
200 | catch (Exception e) | 202 | catch (Exception e) |
201 | { | 203 | { |
202 | database.Reconnect(); | 204 | database.Reconnect(); |
203 | MainLog.Instance.Error(e.ToString()); | 205 | m_log.Error(e.ToString()); |
204 | return null; | 206 | return null; |
205 | } | 207 | } |
206 | } | 208 | } |
@@ -247,7 +249,7 @@ namespace OpenSim.Framework.Data.MySQL | |||
247 | catch (Exception e) | 249 | catch (Exception e) |
248 | { | 250 | { |
249 | database.Reconnect(); | 251 | database.Reconnect(); |
250 | MainLog.Instance.Error(e.ToString()); | 252 | m_log.Error(e.ToString()); |
251 | return returnlist; | 253 | return returnlist; |
252 | } | 254 | } |
253 | } | 255 | } |
@@ -282,7 +284,7 @@ namespace OpenSim.Framework.Data.MySQL | |||
282 | catch (Exception e) | 284 | catch (Exception e) |
283 | { | 285 | { |
284 | database.Reconnect(); | 286 | database.Reconnect(); |
285 | MainLog.Instance.Error(e.ToString()); | 287 | m_log.Error(e.ToString()); |
286 | return returnlist; | 288 | return returnlist; |
287 | } | 289 | } |
288 | } | 290 | } |
@@ -316,7 +318,7 @@ namespace OpenSim.Framework.Data.MySQL | |||
316 | catch (Exception e) | 318 | catch (Exception e) |
317 | { | 319 | { |
318 | database.Reconnect(); | 320 | database.Reconnect(); |
319 | MainLog.Instance.Error(e.ToString()); | 321 | m_log.Error(e.ToString()); |
320 | return null; | 322 | return null; |
321 | } | 323 | } |
322 | } | 324 | } |
@@ -405,7 +407,7 @@ namespace OpenSim.Framework.Data.MySQL | |||
405 | catch (Exception e) | 407 | catch (Exception e) |
406 | { | 408 | { |
407 | database.Reconnect(); | 409 | database.Reconnect(); |
408 | MainLog.Instance.Error(e.ToString()); | 410 | m_log.Error(e.ToString()); |
409 | return null; | 411 | return null; |
410 | } | 412 | } |
411 | } | 413 | } |
diff --git a/OpenSim/Framework/Data.MySQL/MySQLInventoryData.cs b/OpenSim/Framework/Data.MySQL/MySQLInventoryData.cs index c317f4a..57c2c9f 100644 --- a/OpenSim/Framework/Data.MySQL/MySQLInventoryData.cs +++ b/OpenSim/Framework/Data.MySQL/MySQLInventoryData.cs | |||
@@ -38,6 +38,8 @@ namespace OpenSim.Framework.Data.MySQL | |||
38 | /// </summary> | 38 | /// </summary> |
39 | public class MySQLInventoryData : IInventoryData | 39 | public class MySQLInventoryData : IInventoryData |
40 | { | 40 | { |
41 | private static readonly log4net.ILog m_log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); | ||
42 | |||
41 | /// <summary> | 43 | /// <summary> |
42 | /// The database manager | 44 | /// The database manager |
43 | /// </summary> | 45 | /// </summary> |
@@ -104,8 +106,8 @@ namespace OpenSim.Framework.Data.MySQL | |||
104 | tableList["inventoryitems"] = null; | 106 | tableList["inventoryitems"] = null; |
105 | 107 | ||
106 | database.GetTableVersion(tableList); | 108 | database.GetTableVersion(tableList); |
107 | MainLog.Instance.Verbose("MYSQL", "Inventory Folder Version: " + tableList["inventoryfolders"]); | 109 | m_log.Info("[MYSQL]: Inventory Folder Version: " + tableList["inventoryfolders"]); |
108 | MainLog.Instance.Verbose("MYSQL", "Inventory Items Version: " + tableList["inventoryitems"]); | 110 | m_log.Info("[MYSQL]: Inventory Items Version: " + tableList["inventoryitems"]); |
109 | 111 | ||
110 | UpgradeFoldersTable(tableList["inventoryfolders"]); | 112 | UpgradeFoldersTable(tableList["inventoryfolders"]); |
111 | UpgradeItemsTable(tableList["inventoryitems"]); | 113 | UpgradeItemsTable(tableList["inventoryitems"]); |
@@ -170,7 +172,7 @@ namespace OpenSim.Framework.Data.MySQL | |||
170 | catch (Exception e) | 172 | catch (Exception e) |
171 | { | 173 | { |
172 | database.Reconnect(); | 174 | database.Reconnect(); |
173 | MainLog.Instance.Error(e.ToString()); | 175 | m_log.Error(e.ToString()); |
174 | return null; | 176 | return null; |
175 | } | 177 | } |
176 | } | 178 | } |
@@ -208,7 +210,7 @@ namespace OpenSim.Framework.Data.MySQL | |||
208 | catch (Exception e) | 210 | catch (Exception e) |
209 | { | 211 | { |
210 | database.Reconnect(); | 212 | database.Reconnect(); |
211 | MainLog.Instance.Error(e.ToString()); | 213 | m_log.Error(e.ToString()); |
212 | return null; | 214 | return null; |
213 | } | 215 | } |
214 | } | 216 | } |
@@ -254,7 +256,7 @@ namespace OpenSim.Framework.Data.MySQL | |||
254 | catch (Exception e) | 256 | catch (Exception e) |
255 | { | 257 | { |
256 | database.Reconnect(); | 258 | database.Reconnect(); |
257 | MainLog.Instance.Error(e.ToString()); | 259 | m_log.Error(e.ToString()); |
258 | return null; | 260 | return null; |
259 | } | 261 | } |
260 | } | 262 | } |
@@ -292,7 +294,7 @@ namespace OpenSim.Framework.Data.MySQL | |||
292 | catch (Exception e) | 294 | catch (Exception e) |
293 | { | 295 | { |
294 | database.Reconnect(); | 296 | database.Reconnect(); |
295 | MainLog.Instance.Error(e.ToString()); | 297 | m_log.Error(e.ToString()); |
296 | return null; | 298 | return null; |
297 | } | 299 | } |
298 | } | 300 | } |
@@ -325,7 +327,7 @@ namespace OpenSim.Framework.Data.MySQL | |||
325 | } | 327 | } |
326 | catch (MySqlException e) | 328 | catch (MySqlException e) |
327 | { | 329 | { |
328 | MainLog.Instance.Error(e.ToString()); | 330 | m_log.Error(e.ToString()); |
329 | } | 331 | } |
330 | 332 | ||
331 | return null; | 333 | return null; |
@@ -362,7 +364,7 @@ namespace OpenSim.Framework.Data.MySQL | |||
362 | catch (Exception e) | 364 | catch (Exception e) |
363 | { | 365 | { |
364 | database.Reconnect(); | 366 | database.Reconnect(); |
365 | MainLog.Instance.Error(e.ToString()); | 367 | m_log.Error(e.ToString()); |
366 | } | 368 | } |
367 | return null; | 369 | return null; |
368 | } | 370 | } |
@@ -387,7 +389,7 @@ namespace OpenSim.Framework.Data.MySQL | |||
387 | } | 389 | } |
388 | catch (Exception e) | 390 | catch (Exception e) |
389 | { | 391 | { |
390 | MainLog.Instance.Error(e.ToString()); | 392 | m_log.Error(e.ToString()); |
391 | } | 393 | } |
392 | 394 | ||
393 | return null; | 395 | return null; |
@@ -421,7 +423,7 @@ namespace OpenSim.Framework.Data.MySQL | |||
421 | catch (Exception e) | 423 | catch (Exception e) |
422 | { | 424 | { |
423 | database.Reconnect(); | 425 | database.Reconnect(); |
424 | MainLog.Instance.Error(e.ToString()); | 426 | m_log.Error(e.ToString()); |
425 | return null; | 427 | return null; |
426 | } | 428 | } |
427 | } | 429 | } |
@@ -459,7 +461,7 @@ namespace OpenSim.Framework.Data.MySQL | |||
459 | } | 461 | } |
460 | catch (MySqlException e) | 462 | catch (MySqlException e) |
461 | { | 463 | { |
462 | MainLog.Instance.Error(e.ToString()); | 464 | m_log.Error(e.ToString()); |
463 | } | 465 | } |
464 | } | 466 | } |
465 | 467 | ||
@@ -488,7 +490,7 @@ namespace OpenSim.Framework.Data.MySQL | |||
488 | catch (MySqlException e) | 490 | catch (MySqlException e) |
489 | { | 491 | { |
490 | database.Reconnect(); | 492 | database.Reconnect(); |
491 | MainLog.Instance.Error(e.ToString()); | 493 | m_log.Error(e.ToString()); |
492 | } | 494 | } |
493 | } | 495 | } |
494 | 496 | ||
@@ -516,7 +518,7 @@ namespace OpenSim.Framework.Data.MySQL | |||
516 | } | 518 | } |
517 | catch (Exception e) | 519 | catch (Exception e) |
518 | { | 520 | { |
519 | MainLog.Instance.Error(e.ToString()); | 521 | m_log.Error(e.ToString()); |
520 | } | 522 | } |
521 | } | 523 | } |
522 | 524 | ||
@@ -548,7 +550,7 @@ namespace OpenSim.Framework.Data.MySQL | |||
548 | } | 550 | } |
549 | catch (Exception e) | 551 | catch (Exception e) |
550 | { | 552 | { |
551 | MainLog.Instance.Error(e.ToString()); | 553 | m_log.Error(e.ToString()); |
552 | } | 554 | } |
553 | } | 555 | } |
554 | 556 | ||
@@ -593,7 +595,7 @@ namespace OpenSim.Framework.Data.MySQL | |||
593 | catch (MySqlException e) | 595 | catch (MySqlException e) |
594 | { | 596 | { |
595 | database.Reconnect(); | 597 | database.Reconnect(); |
596 | MainLog.Instance.Error(e.ToString()); | 598 | m_log.Error(e.ToString()); |
597 | } | 599 | } |
598 | } | 600 | } |
599 | 601 | ||
@@ -609,7 +611,7 @@ namespace OpenSim.Framework.Data.MySQL | |||
609 | catch (MySqlException e) | 611 | catch (MySqlException e) |
610 | { | 612 | { |
611 | database.Reconnect(); | 613 | database.Reconnect(); |
612 | MainLog.Instance.Error(e.ToString()); | 614 | m_log.Error(e.ToString()); |
613 | } | 615 | } |
614 | } | 616 | } |
615 | 617 | ||
diff --git a/OpenSim/Framework/Data.MySQL/MySQLManager.cs b/OpenSim/Framework/Data.MySQL/MySQLManager.cs index 3df0242..f70b505 100644 --- a/OpenSim/Framework/Data.MySQL/MySQLManager.cs +++ b/OpenSim/Framework/Data.MySQL/MySQLManager.cs | |||
@@ -42,6 +42,8 @@ namespace OpenSim.Framework.Data.MySQL | |||
42 | /// </summary> | 42 | /// </summary> |
43 | internal class MySQLManager | 43 | internal class MySQLManager |
44 | { | 44 | { |
45 | private static readonly log4net.ILog m_log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); | ||
46 | |||
45 | /// <summary> | 47 | /// <summary> |
46 | /// The database connection object | 48 | /// The database connection object |
47 | /// </summary> | 49 | /// </summary> |
@@ -71,7 +73,7 @@ namespace OpenSim.Framework.Data.MySQL | |||
71 | 73 | ||
72 | dbcon.Open(); | 74 | dbcon.Open(); |
73 | 75 | ||
74 | MainLog.Instance.Verbose("MYSQL", "Connection established"); | 76 | m_log.Info("[MYSQL]: Connection established"); |
75 | } | 77 | } |
76 | catch (Exception e) | 78 | catch (Exception e) |
77 | { | 79 | { |
@@ -113,7 +115,7 @@ namespace OpenSim.Framework.Data.MySQL | |||
113 | } | 115 | } |
114 | catch (Exception e) | 116 | catch (Exception e) |
115 | { | 117 | { |
116 | MainLog.Instance.Error("Unable to reconnect to database " + e.ToString()); | 118 | m_log.Error("Unable to reconnect to database " + e.ToString()); |
117 | } | 119 | } |
118 | } | 120 | } |
119 | } | 121 | } |
@@ -194,7 +196,7 @@ namespace OpenSim.Framework.Data.MySQL | |||
194 | } | 196 | } |
195 | catch (Exception e) | 197 | catch (Exception e) |
196 | { | 198 | { |
197 | MainLog.Instance.Error(e.ToString()); | 199 | m_log.Error(e.ToString()); |
198 | } | 200 | } |
199 | } | 201 | } |
200 | tables.Close(); | 202 | tables.Close(); |
@@ -245,7 +247,7 @@ namespace OpenSim.Framework.Data.MySQL | |||
245 | } | 247 | } |
246 | catch (Exception e) | 248 | catch (Exception e) |
247 | { | 249 | { |
248 | MainLog.Instance.Error("Unable to reconnect to database " + e.ToString()); | 250 | m_log.Error("Unable to reconnect to database " + e.ToString()); |
249 | } | 251 | } |
250 | 252 | ||
251 | // Run the query again | 253 | // Run the query again |
@@ -263,7 +265,7 @@ namespace OpenSim.Framework.Data.MySQL | |||
263 | catch (Exception e) | 265 | catch (Exception e) |
264 | { | 266 | { |
265 | // Return null if it fails. | 267 | // Return null if it fails. |
266 | MainLog.Instance.Error("Failed during Query generation: " + e.ToString()); | 268 | m_log.Error("Failed during Query generation: " + e.ToString()); |
267 | return null; | 269 | return null; |
268 | } | 270 | } |
269 | } | 271 | } |
@@ -523,7 +525,7 @@ namespace OpenSim.Framework.Data.MySQL | |||
523 | } | 525 | } |
524 | catch (Exception e) | 526 | catch (Exception e) |
525 | { | 527 | { |
526 | MainLog.Instance.Error(e.ToString()); | 528 | m_log.Error(e.ToString()); |
527 | return false; | 529 | return false; |
528 | } | 530 | } |
529 | 531 | ||
@@ -617,7 +619,7 @@ namespace OpenSim.Framework.Data.MySQL | |||
617 | } | 619 | } |
618 | catch (Exception e) | 620 | catch (Exception e) |
619 | { | 621 | { |
620 | MainLog.Instance.Error(e.ToString()); | 622 | m_log.Error(e.ToString()); |
621 | return false; | 623 | return false; |
622 | } | 624 | } |
623 | 625 | ||
@@ -726,7 +728,7 @@ namespace OpenSim.Framework.Data.MySQL | |||
726 | } | 728 | } |
727 | catch (Exception e) | 729 | catch (Exception e) |
728 | { | 730 | { |
729 | MainLog.Instance.Error(e.ToString()); | 731 | m_log.Error(e.ToString()); |
730 | return false; | 732 | return false; |
731 | } | 733 | } |
732 | 734 | ||
diff --git a/OpenSim/Framework/Data.MySQL/MySQLUserData.cs b/OpenSim/Framework/Data.MySQL/MySQLUserData.cs index 2ee20e0..0db727c 100644 --- a/OpenSim/Framework/Data.MySQL/MySQLUserData.cs +++ b/OpenSim/Framework/Data.MySQL/MySQLUserData.cs | |||
@@ -39,6 +39,8 @@ namespace OpenSim.Framework.Data.MySQL | |||
39 | /// </summary> | 39 | /// </summary> |
40 | internal class MySQLUserData : IUserData | 40 | internal class MySQLUserData : IUserData |
41 | { | 41 | { |
42 | private static readonly log4net.ILog m_log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); | ||
43 | |||
42 | /// <summary> | 44 | /// <summary> |
43 | /// Database manager for MySQL | 45 | /// Database manager for MySQL |
44 | /// </summary> | 46 | /// </summary> |
@@ -119,7 +121,7 @@ namespace OpenSim.Framework.Data.MySQL | |||
119 | database.ExecuteResourceSql("UpgradeUsersTableToVersion2.sql"); | 121 | database.ExecuteResourceSql("UpgradeUsersTableToVersion2.sql"); |
120 | return; | 122 | return; |
121 | } | 123 | } |
122 | //MainLog.Instance.Verbose("DB","DBVers:" + oldVersion); | 124 | //m_log.Info("[DB]: DBVers:" + oldVersion); |
123 | } | 125 | } |
124 | 126 | ||
125 | /// <summary> | 127 | /// <summary> |
@@ -164,7 +166,7 @@ namespace OpenSim.Framework.Data.MySQL | |||
164 | catch (Exception e) | 166 | catch (Exception e) |
165 | { | 167 | { |
166 | database.Reconnect(); | 168 | database.Reconnect(); |
167 | MainLog.Instance.Error(e.ToString()); | 169 | m_log.Error(e.ToString()); |
168 | return null; | 170 | return null; |
169 | } | 171 | } |
170 | } | 172 | } |
@@ -208,7 +210,7 @@ namespace OpenSim.Framework.Data.MySQL | |||
208 | catch (Exception e) | 210 | catch (Exception e) |
209 | { | 211 | { |
210 | database.Reconnect(); | 212 | database.Reconnect(); |
211 | MainLog.Instance.Error(e.ToString()); | 213 | m_log.Error(e.ToString()); |
212 | return; | 214 | return; |
213 | } | 215 | } |
214 | } | 216 | } |
@@ -243,7 +245,7 @@ namespace OpenSim.Framework.Data.MySQL | |||
243 | catch (Exception e) | 245 | catch (Exception e) |
244 | { | 246 | { |
245 | database.Reconnect(); | 247 | database.Reconnect(); |
246 | MainLog.Instance.Error(e.ToString()); | 248 | m_log.Error(e.ToString()); |
247 | return; | 249 | return; |
248 | } | 250 | } |
249 | } | 251 | } |
@@ -272,7 +274,7 @@ namespace OpenSim.Framework.Data.MySQL | |||
272 | catch (Exception e) | 274 | catch (Exception e) |
273 | { | 275 | { |
274 | database.Reconnect(); | 276 | database.Reconnect(); |
275 | MainLog.Instance.Error(e.ToString()); | 277 | m_log.Error(e.ToString()); |
276 | return; | 278 | return; |
277 | } | 279 | } |
278 | } | 280 | } |
@@ -317,7 +319,7 @@ namespace OpenSim.Framework.Data.MySQL | |||
317 | catch (Exception e) | 319 | catch (Exception e) |
318 | { | 320 | { |
319 | database.Reconnect(); | 321 | database.Reconnect(); |
320 | MainLog.Instance.Error(e.ToString()); | 322 | m_log.Error(e.ToString()); |
321 | return Lfli; | 323 | return Lfli; |
322 | } | 324 | } |
323 | 325 | ||
@@ -328,7 +330,7 @@ namespace OpenSim.Framework.Data.MySQL | |||
328 | 330 | ||
329 | public void UpdateUserCurrentRegion(LLUUID avatarid, LLUUID regionuuid) | 331 | public void UpdateUserCurrentRegion(LLUUID avatarid, LLUUID regionuuid) |
330 | { | 332 | { |
331 | MainLog.Instance.Verbose("USER", "Stub UpdateUserCUrrentRegion called"); | 333 | m_log.Info("[USER]: Stub UpdateUserCUrrentRegion called"); |
332 | } | 334 | } |
333 | 335 | ||
334 | 336 | ||
@@ -371,7 +373,7 @@ namespace OpenSim.Framework.Data.MySQL | |||
371 | catch (Exception e) | 373 | catch (Exception e) |
372 | { | 374 | { |
373 | database.Reconnect(); | 375 | database.Reconnect(); |
374 | MainLog.Instance.Error(e.ToString()); | 376 | m_log.Error(e.ToString()); |
375 | return returnlist; | 377 | return returnlist; |
376 | } | 378 | } |
377 | } | 379 | } |
@@ -406,7 +408,7 @@ namespace OpenSim.Framework.Data.MySQL | |||
406 | catch (Exception e) | 408 | catch (Exception e) |
407 | { | 409 | { |
408 | database.Reconnect(); | 410 | database.Reconnect(); |
409 | MainLog.Instance.Error(e.ToString()); | 411 | m_log.Error(e.ToString()); |
410 | return returnlist; | 412 | return returnlist; |
411 | } | 413 | } |
412 | } | 414 | } |
@@ -437,7 +439,7 @@ namespace OpenSim.Framework.Data.MySQL | |||
437 | catch (Exception e) | 439 | catch (Exception e) |
438 | { | 440 | { |
439 | database.Reconnect(); | 441 | database.Reconnect(); |
440 | MainLog.Instance.Error(e.ToString()); | 442 | m_log.Error(e.ToString()); |
441 | return null; | 443 | return null; |
442 | } | 444 | } |
443 | } | 445 | } |
@@ -488,7 +490,7 @@ namespace OpenSim.Framework.Data.MySQL | |||
488 | catch (Exception e) | 490 | catch (Exception e) |
489 | { | 491 | { |
490 | database.Reconnect(); | 492 | database.Reconnect(); |
491 | MainLog.Instance.Error(e.ToString()); | 493 | m_log.Error(e.ToString()); |
492 | return; | 494 | return; |
493 | } | 495 | } |
494 | 496 | ||
@@ -525,7 +527,7 @@ namespace OpenSim.Framework.Data.MySQL | |||
525 | catch (Exception e) | 527 | catch (Exception e) |
526 | { | 528 | { |
527 | database.Reconnect(); | 529 | database.Reconnect(); |
528 | MainLog.Instance.Error(e.ToString()); | 530 | m_log.Error(e.ToString()); |
529 | return null; | 531 | return null; |
530 | } | 532 | } |
531 | } | 533 | } |
@@ -553,7 +555,7 @@ namespace OpenSim.Framework.Data.MySQL | |||
553 | catch (Exception e) | 555 | catch (Exception e) |
554 | { | 556 | { |
555 | database.Reconnect(); | 557 | database.Reconnect(); |
556 | MainLog.Instance.Error(e.ToString()); | 558 | m_log.Error(e.ToString()); |
557 | } | 559 | } |
558 | } | 560 | } |
559 | 561 | ||