IslandzVW / halcyon

InWorldz Halcyon 3d virtual reality world simulator
BSD 3-Clause "New" or "Revised" License
21 stars 26 forks source link

MySQL DB error on the region console #336

Closed Vinhold closed 6 years ago

Vinhold commented 7 years ago

Saw this error on the region 1 console, running Halcyon 0.9.31 release on the IMA Test grid. 11:29:54 - [SCENE]: Bulk storing 39 objects 11:29:55 - [SCENE]: Persistance failed with exception MySql.Data.MySqlClient.My SqlException (0x80004005): Out of range value for column 'nextPermissions' at row 14

Log File reports: 2017-02-28 11:59:49,614 [STP SmartThreadPool Thread #0] DEBUG OpenSim.Region.Framework.Scenes.SceneObjectGroup - [SCENE]: Bulk storing 39 objects 2017-02-28 11:59:50,315 [STP SmartThreadPool Thread #0] ERROR OpenSim.Region.Framework.Scenes.Scene - [SCENE]: Persistance failed with exception MySql.Data.MySqlClient.MySqlException (0x80004005): Out of range value for column 'nextPermissions' at row 14 at MySql.Data.MySqlClient.MySqlStream.ReadPacket() at MySql.Data.MySqlClient.NativeDriver.GetResult(Int32& affectedRow, Int64& insertedId) at MySql.Data.MySqlClient.Driver.NextResult(Int32 statementId, Boolean force) at MySql.Data.MySqlClient.MySqlDataReader.NextResult() at MySql.Data.MySqlClient.MySqlCommand.ExecuteReader(CommandBehavior behavior) at MySql.Data.MySqlClient.MySqlCommand.ExecuteNonQuery() at OpenSim.Data.MySQL.MySQLDataStore.BulkStoreObjectInventories(IEnumerable1 items, IEnumerable1 deletedItems) in X:\halcyon-0.9.31.6242\OpenSim\Data\MySQL\MySQLRegionData.cs:line 2531 at OpenSim.Region.Framework.Scenes.SceneObjectGroup.ProcessBulkBackup(IList`1 groups, IRegionDataStore datastore, Boolean forcedBackup) in X:\halcyon-0.9.31.6242\OpenSim\Region\Framework\Scenes\SceneObjectGroup.cs:line 1960 at OpenSim.Region.Framework.Scenes.Scene.PerformBackup(Boolean forceBackup) in X:\halcyon-0.9.31.6242\OpenSim\Region\Framework\Scenes\Scene.cs:line 1563, objects will not be untainted

I have verified that the 'nextPermissions' field does exist in the primitems table and is INT(11) NOT NULL, MYSQL DB Server Version: 5.7

appurist commented 7 years ago

The query that is failing is the bulk storage of prims (same thing that runs when you type "backup" on the region console).

It's a complex section of code, but an example of a query this uses, with (in this case 2 rows) is:

INSERT INTO primitems (invType, assetType, name, description, creationDate, nextPermissions, currentPermissions, basePermissions, everyonePermissions, groupPermissions, flags, itemID, primID, assetID, parentFolderID, creatorID, ownerID, groupID, lastOwnerID, canDebitOwner)
  values (?invType0, ?assetType0, ?name0, ?description0, ?creationDate0, ?nextPermissions0, ?currentPermissions0, ?basePermissions0, ?everyonePermissions0, ?groupPermissions0, ?flags0, ?itemID0, ?primID0, ?assetID0, ?parentFolderID0, ?creatorID0, ?ownerID0, ?groupID0, ?lastOwnerID0, ?canDebitOwner0),
    (?invType1, ?assetType1, ?name1, ?description1, ?creationDate1, ?nextPermissions1, ?currentPermissions1, ?basePermissions1, ?everyonePermissions1, ?groupPermissions1, ?flags1, ?itemID1, ?primID1, ?assetID1, ?parentFolderID1, ?creatorID1, ?ownerID1, ?groupID1, ?lastOwnerID1, ?canDebitOwner1) 
  ON DUPLICATE KEY UPDATE invType=VALUES(invType), assetType=VALUES(assetType), name=VALUES(name), description=VALUES(description), creationDate=VALUES(creationDate), nextPermissions=VALUES(nextPermissions), currentPermissions=VALUES(currentPermissions), basePermissions=VALUES(basePermissions), everyonePermissions=VALUES(everyonePermissions), groupPermissions=VALUES(groupPermissions), flags=VALUES(flags), primID=VALUES(primID), assetID=VALUES(assetID), parentFolderID=VALUES(parentFolderID), creatorID=VALUES(creatorID), ownerID=VALUES(ownerID), groupID=VALUES(groupID), lastOwnerID=VALUES(lastOwnerID), canDebitOwner=VALUES(canDebitOwner)

It supports up to 128 rows and in the real-world test I ran, the query was 15699 characters long.

There are two paths through that code I'm taking a look at whether that matters. It's having an exception on the high-runner case, not the less common one.

appurist commented 7 years ago

The exception itself is in BulkStoreObjectInventories at MySQLRegionData.cs line 2531. That's what my comment above is referring to.

kf6kjg commented 6 years ago

Is this resolved?

Vinhold commented 6 years ago

I think this has been resolved in one of the releases after my original posting of the error. I no longer see the error showing up in the region log.

appurist commented 6 years ago

Okay that's great, that persistence runs every 5 minutes so if it was still around, you'd see it.