bw logo

BigWorld Technology Server Release Notes

BigWorld Technology 2.1. Released 2012.

This document is proprietary commercial in confidence and access is restricted to authorised users. This document is protected by copyright laws of Australia, other countries and international treaties. Unauthorised use, reproduction or distribution of this document, or any portion of this document, may result in the imposition of civil and criminal penalties as provided by law.


BigWorld Technology 2.1 Server Release Notes


1. Important Notes

  • The Client/Server protocol version for this release is 2.0.8. This protocol version matches the release when the protocol was last changed. Only clients with the 2.0.8 protocol version can connect to the server in this release.

2. New Features

  • Added a new flag SendLatestOnly that can be set on properties that have OTHER_CLIENTS or ALL_CLIENTS flag (or client methods). If set to true, only the latest message for a property (or a method call) is sent to clients instead of a message for each change of that property (or repeated call of a method). This can be used to save bandwidth.

    Also added flag IsReliable for the same properties and methods. If set to false, these messages will be sent unreliably from the server to the client. If there is packet loss, this message will not be delivered.

    Setting SendLatestOnly to true and IsReliable to false and changing a value every game tick causes behaviour similar to volatile position and direction values.

    See the Server Programming Guide for more information.

    Bug 28421

  • Added a new option AppealRadius that can be set on entity types in their .def file. This allows for entities to be seen by a client at a distance further than the player's Area of Interest distance (i.e. Entity.aoiRadius). This is useful for implementing large entities that can be seen from a great distance, such as a large dragon.

    Additionally, a flag DetailedPosition/SendLatestOnly has also been added to entity .def files. If an entity does not have a volatile position, any movement of the cell entity will cause a history event. Setting this to true allows for this to be efficiently sent to clients without them getting redundant messages.

    The DetailedPosition/SendLatestOnly flag is implicitly set when AppealRadius is non-zero.

    See the Server Programming Guide for more information.

    Bug 3764

  • Added a new, optional server component named ServiceApp. This is a modified BaseApp that allows implementing scripted services. An example implementation of a service is included that runs a Python web server (using the Twisted Python framework) inside the ServiceApp to give a RESTful web interface for accessing live game entities. For details on this example service, refer to The TwistedWeb Service.

    Bug 31543

  • Added support for two-way script calls. Previously, all remote script calls within a BigWorld server were one-way. This meant that simulating a two-way call required implementing two one-way methods. Two-way methods are now supported. The calling code receives a Deferred object. Callback methods can be added to this object to receive the response or failure information. For details, refer to Two-way calls.

    Bug 16894

  • Added support for asynchronous handling of onInit and onFini events. These event listeners can now return a Deferred object. If so, the initialisation or shutdown stages will not progress until these have been called.

    See the Client Python API for more details.

    Bug 31978

  • Added BigWorld.addEventListener(). This allows registering for BWPersonality callbacks outside of this module. This is particularly useful for decoupling reusable modules from the BWPersonality module.

    See the Client Python API for more details.

    Bug 31926

  • It is now possible to get a Python console on the DBMgr process. This can be done through WebConsole or via the command:

    control_cluster.py pyconsole dbmgr

    Execute control_cluster.py --help for more info on ControlCluster usage.

    Bug 31942

  • Added Python function BigWorld.fetchURL() that allows asynchronous fetching of URL via HTTP to the BaseApp, CellApp and DBMgr.

    For more information on the fetchURL() function, please refer to either the Client Python API, Client Python API, or ????.

    Bug 27602

  • Added Python function BigWorld.lookUpBasesByIndex() that allows look-ups of entities in the database on simple property queries, as well as offline/online status.

    See the Client Python API for more details.

    Bug 28424

  • Added flag shouldWriteToPrimary to Base.writeToDB(). This allows writing to the primary database instead of the secondary database. It is useful when using the new BigWorld.lookUpBasesByIndex() function.

    See the Client Python API for more details.

    Bug 28424

  • Added configuration option cellApp/maxTickStagger to bw.xml. This adds the ability to stagger the CellApp update ticks.

    If all CellApps are synchronised, the network load produced by cluster is very spiky. Having each CellApp produce its traffic at offset times helps to spread the traffic out over time. This helps avoid packet loss for some network hardware.

    See the Server Operations Guide for more details.

    Bug 31621

  • Added a property Entity.artificialLoad to the cell entity. This allows an entity to add an artificial amount of load to the calculated load that is used for load balancing. It is useful if you have an entity or space that often has periods of low load but can quickly change.

    See Client Python API for more details.

    Bug 28438

  • The offline patcher now supports recursive ZIP file archives, that is, ZIP file archives inside ZIP file archives. These are handled by generating deltas between the contents of the ZIP files, instead of a delta between the ZIP files themselves.

    See the ???? document for more details.

    Bug 26666

  • A new CellApp script method BigWorld.isNextTickPending() has been added. This new method returns a boolean indicating whether the current tick has exceeded its assigned execution time. This allows expensive script computations to know when to relinquish control in order for the next tick to start processing.

    For more information on the isNextTickPending() please refer to the Client Python API.

    Bug 26863

  • Two new cell entity Python callbacks have been added for when entities leave the area of interest of a Witness. The new callbacks are Entity.onLeftAoI() and Entity.onLeftAoIID().

    For more information on the onLeftAoI() and onLeftAoIID() callbacks, please refer to the Client Python API.

    Bug #31787 / Ticket #2968

  • The data directory used by BWLockD can be specified on the command line (the default path is /var/lib/bigworld/bwlockd).

    Bug #31765

  • Added configuration option maxOpenFileDescriptors to bw.xml. This adds the capability to increase the number of simultaneously open files for each App.

    bwmachined is also updated to ensure that this value can be raised to at least 16384 in processes it starts.

    For more information on this option please refer to the Server Operations Guide section General Configuration Options.

    Bug 31878

  • Added two new CellApp Entity callbacks, Entity.onGhostCreated() and Entity.onGhostDestroyed().

    As the names suggest these methods are called on ghosted entities as they are created and destroyed.

    Note

    These callbacks must be decorated with the @bwdecorators.callableOnGhost decorator in order to be successfully called.

    For more information on the onGhostCreated() and onGhostDestroyed() callbacks, please refer to the Client Python API.

    Bug 32301

  • A new ControlCluster command is available for outputting information about server processes in Nagios-compatible format.

    Thresholds can be set for triggering warning and critical conditions based on load and number of running BaseApps and CellApps. This can be useful for integrating a check for server availability with the Nagios monitoring tool.

    Refer to the --help output for the nagios ControlCluster command for more details.

    Bug 32354

  • Added a new CellApp bw.xml option shouldNavigationDropPosition which allows the navigation code to automatically drop the position of an entity from the navigation mesh down to the collision scene.

    For more information on this option please refer to the Server Operations Guide section CellApp Configuration Options.

    Bug 32301

  • A new document has been added which describes how to interface Python and C++, located at Python and C. The section on debugging script memory leaks was moved from the Server Programming Guide into the Python and C document.

    Bug 32074

  • When using a custom authentication system with DBMgr, it is now possible to send extra information back to the client on a successful login.

    This can be used, for example, to allow your authentication system to generate an authentication token when a successful username and password are first used. This token could then be passed on subsequent logins, avoiding the username/password step for players when using the same hardware.

    A second example is returning information about current account status (e.g. remaining credit).

    Bug 32552

  • Ghosted cell entities can now have set_* style callbacks called when ghosted properties change on the real entity. These optional callbacks take the same form as the client-side set_* callbacks. For more information, please refer to the Property Callbacks On Ghosted Entities.

    Bug 32654

  • Improved the bandwidth usage of method calls and property updates sent from the server to the client. Savings will typically be between 2 and 6 bytes per message.

    Two main optimisations have been implemented. Previously each script message included the entity id. This is now done separately so that multiple messages can share this data. For entities with a volatile position, four bytes are saved. For non-volatile entities, typically 2-4 bytes are saved; 2 for the first message and 4 for subsequent messages.

    The second optimisation is dropping the size prefix for any script messages that are constant size. For these messages, 2 bytes are saved. For variable size messages, 1 byte is now saved.

    Bug 32152 and Bug 32638

  • The SpaceViewer tool has been reimplemented in HTML and is now integrated into the Web Console. Consequently, the former wx Python version is now deprecated.

    Bug 32257

3. Changed Features

3.1. Script & Script API

  • Python was upgraded from 2.6.4 to 2.6.6

    IMPORTANT: Make sure to update your lib-dynload64 directory as Python binary modules (.so files) may not be compatible. This may result in stalling when importing these modules or other server instability.

    Note that this directory has also been moved from res/scripts/common to res/scripts/server_common.

    Bug 27617

  • IMPORTANT: The server only Python binary modules (.so files) have been moved from the Python script directory res/scripts/common to the server only Python script directory res/scripts/server_common. This change allows easier separation of files during the resource packing step for production releases.

    Bug 27617

  • ResMgr.resolveToAbsolutePath has been modified so that if the given path does not exist it will return the path relative to the first resource tree instead of raising an exception.

    For more information on the resolveToAbsolutePath method please refer to either the Client Python API, Client Python API, or ????.

    Bug 32219

  • As part of the Python upgrade the behaviour of the open() function has changed. Files and paths referenced via open() will no longer be relative to the BigWorld resource tree as defined in your .bwmachined.conf file. Files are now relative to os.getcwd().

    In order to replicate old behaviour of referencing files within the BigWorld resource tree you will need to use the ResMgr.resolveToAbsolutePath() method. For example:

    fp = open( "data/custom_data.dat", "r" )

    would become

    filename = ResMgr.resolveToAbsolutePath( "data/custom_data.dat" )
    fp = open( filename, "r" )

    Alternatively, there is a new utility module BWUtil that contains a method to replace the builtin open() function to support the original behaviour for relative files.

    To activate this, put the following in your BWAutoImport.py:

    import BWUtil
    BWUtil.monkeyPatchOpen()

    Bug 27617

  • BigWorld.executeRawDatabaseCommand() now supports returning multiple result sets. These multiple result sets can be returned by calling this function with multiple SQL statements separated by a semicolon, or from calling stored procedure calls. Refer to the Execute Commands on SQL Database for more details.

    Bug 28423 / Ticket #2781

  • The implementation of the method Entity.bounceGrenade() has been moved out of the core CellApp binary. This method is now available as part of the CellApp extensions example located in bigworld/src/examples/cellapp_extension.

    To use this method you will now need to compile the CellApp extension separately to the CellApp binary.

    Bug 26229

  • The BWLog module method getStrings() that was deprecated in previous releases in favour of getFormatStrings() has now been removed.

    To make any code compatible, simply change your code to use BWLog.getFormatStrings().

    There is no related documentation for this API. Please refer to the source code for PyBWLog in bigworld/src/server/tools/message_logger for information on this class.

  • The behaviour when assigning to a FIXED_DICT or ARRAY property of a base entity has changed. Previously, assigning to a FIXED_DICT property with a Python dict would just keep this dict instance. This value is now converted to a PyFixedDictDataInstance. Similarly, Python list instances are converted to PyArrayDataInstance. This is now consistent with the CellApp behaviour.

    For more information on these property types, please refer to the Server Programming Guide section Property Types.

    Bug 18972

  • The Note Data Store example located in fantasydemo/res/scripts/base and fantasydemo/res/server/examples/note_data_store has been updated to use PostgreSQL by default. MySQL support should still work as before for non-indie customers.

    For more information on using either PostgreSQL or MySQL with the Note Data Store example, please refer to the instructions file located in fantasydemo/res/server/examples/note_data_store/instructions.txt.

    Bug 28416

  • The CellApp method BigWorld.createEntityOnBaseApp now accepts an optional third argument of a callable object which will be invoked when the Base entity has been created. The callback provides a single argument which is the Base mailbox of the newly created entity on success, or None on failure.

    For more information on the createEntityOnBaseApp() method please refer to the Client Python API.

    Bug 26962

  • The CellApp method Entity.entitiesInAoI() will no longer return destroyed entities. Previously, this could occur if an entity in an AoI was recently destroyed but the client has not yet been informed.

    For more information on the entitiesInAoI() method please refer to the Client Python API.

    Bug 31563

  • Entity.direction is now a mutable type instead of being a copy of the entity's direction. This means that entity.direction[2] = newYaw now works. If you need to take a copy of the current direction, use currDir = Math.Vector3( entity.direction ).

    For more information on the direction property please refer to the Client Python API.

    Bug 26892

  • The onFini event is now triggered slightly earlier. It is now called immediately after leaving the main run loop and before other things have started to shut down.

    For more information on the onFini method please refer to either the Client Python API, Client Python API, or ????.

    Bug 31942

  • A new optional parameter, shouldRememberUnknown, has been added to the PyBillingResponse class's loadEntityByName() method, used in the Python billing system. If set to True, newly created unknown entities are saved out to the database if createUnknown is also True. If set to False, they are not automatically written out to the database on login. It defaults to False for backwards compatibility.

    For more information on these methods and parameters please refer to the ????.

    Bug 31943

  • The CellApp methods Entity.navigate() and Entity.navigateFollow() have been deprecated.

    To update your code, use the recommended method BigWorld.navigateStep(). See How To Move Entities for details.

    BigWorld.navigateStep() differs from Entity.navigateFollow() only by taking a position as a parameter rather than an Entity reference, a distance and an angle.

    BigWorld.navigateStep() differs from Entity.navigate() as it exposes more control over navigation process to the Python scripting code.

    Bug 31732

  • Deprecated Py_Return in favour of Py_RETURN_NONE, which is part of the standard Python distribution.

    Deprecated PyTypePlus in favour of PyTypeObject, which is part of the standard Python distribution.

    Deprecated PyInstancePlus and Py_InstanceHeader as they are simply aliases for PyObjectPlus and Py_Header.

    There is no related documentation for this change.

    Bug 32074

  • The CellApp method Entity.navigateStep now calls the Entity.onMoveFailure notification method if the system detects that Entity.navigateStep is being called too frequently in a single tick from the Entity.onMove notification method.

    In previous releases this situation would log a warning in the server logs and stop calling the Entity.onMove notification method. The most likely cause is attempting to navigate to a position the entity already occupies.

    For more information on these method please refer to the Client Python API.

    Bug 32573

3.2. DBMgr

  • Billing system support has been updated to be configurable at startup time using the bw.xml option <billingSystem><type>. For more information on this option please refer to the Server Operations Guide.

    Bug 31451

  • The database engines used by DBMgr have been modified to now be loaded from shared libraries (.so files) in the directory bigworld/bin/Hybrid64/dbmgr-extensions.

    The source code for the database engine shared libraries can be found in bigworld/src/server/dbmgr_extensions/bwengine_<engine_type>.

    Bug 31482

3.2.1. Consolidation & Snapshotting

A number of changes have occurred to improve the consolidation and snapshotting facilities of the primary and secondary databases. The changes are focused on improving feedback for error situations that were previously difficult to diagnose, as well as allowing smoother installation support when using RPMs.

  • The TransferDBs Python script has been converted into a C++ application. The source code for this program now resides in the directory bigworld/src/server/tools/transfer_db. The binary location remains untouched in bigworld/bin/Hybrid64/commands/transfer_db.

    For more information regarding TransferDB please refer to the Server Operations Guide section Database Snapshot Tool.

    Bug 31556

  • The SnapshotHelper program now builds into the directory bigworld/bin/Hybrid64/commands/_helpers. SnapshotHelper used to build into bigworld/tools/server/bin/Hybrid64.

    This change allows the BigWorld server installation to not depend on the server tools directory being installed on cluster machines that are not intended to run the tools.

    For more information regarding SnapshotHelper please refer to the Server Operations Guide section Database Snapshot Tool.

    Bug 31556

3.3. Load Balancing

A number of improvements have been made to the load balancing. These include:

  • Supporting multiple CPU load boundaries calculated by the CellApps. These are passed to CellAppMgr and used by the load balancing. These are exposed to SpaceViewer as Entity Bounds.

    For more information please refer to the Server Operations Guide section Load Balancing Configuration Options option numCPUOffloadLevels.

    Bug 31955

  • The load balancing now has a concept of an aggression level. If thrashing of a cell partition occurs (rapid movement back and forth), the balance aggression is reduced. This helps to avoid these thrashing situations. This aggression value has been exposed to SpaceViewer.

    For more information please refer to the Server Operations Guide section Load Balancing Configuration Options options agressionDecrease, aggressionIncreasePeriod, maxAggression, and maxAggressionIncreasePeriod.

    Bug 31955

  • Better CellApp load calculation to feed into the load balancing algorithm. Previously, the load change due to offloading or onloading an entity could take a while to be factored in. This is now estimated immediately.

    Bug 31955

  • Improved balancing when CellApp channels are overloaded.

    Bug 31955

  • Decreased default settings for lowerBound and upperBound in bw.xml's cellAppMgr/cellAppLoad. This greatly increases the likelihood of using more CellApps earlier.

    For more information on these options please refer to the Server Operations Guide section CellAppMgr Configuration Options.

    Bug 31955

  • Removed old configuration options. These include:

    • balance/minEntityOffload

    • balance/minMovement

    • balance/slowApproachFactor

    • cellApp/offloadHysteresis

    • cellApp/channelOverloadLimit

    • cellApp/offloadMaxPerCheck

    • cellApp/ghostingMaxPerCheck

    Bug 31955

  • Added new configuration options. These include:

    • balance/aggressionDecrease

    • balance/aggressionIncreasePeriod

    • balance/maxAggression

    • balance/maxAggressionIncreasePeriod

    For more information on these options please refer to the Server Operations Guide sections Load Balancing Configuration Options.

    Bug 31955

3.4. Documentation

  • The Server Installation Guide has been re-written to provide a more logical installation workflow as well as a better first run experience.

    As part of this document update the Server Tools Installation Guide no longer exists and has been fully incorporated into the Server Installation Guide. This was possible due to the simplification of the server tools installation process from using RPM packages.

    Bug 31653

3.5. Miscellaneous

  • When installing BWMachineD from an RPM package the kernel socket buffer sizes will be set to the recommended minimum values if they have not already been set in /etc/sysctl.conf.

    Existing values will not be modified. If the current values are lower the recommended minimum values BWMachineD will emit a warning in the system logs (/var/log/messages).

    Bug 21832

  • DBMgr and SyncDB now strictly enforce the use of InnoDB as the storage engine for its tables. They attempt to change the engine of any table that does not comply on startup. SyncDB will also give a notice if the default storage engine is something other than InnoDB.

    Bug 27017 / Ticket 1480

  • Unit test binaries have been moved from the bw_root/tests directory into bw_root/bigworld/bin/unit_tests. This helps to consolidate all generated binaries into a single, well known location.

    Bug 28169

  • The libcURL library used by BaseApp, CellApp and DBMgr has been upgraded to version 7.21.6, and now builds against our supplied OpenSSL headers. Previously, the system's OpenSSL headers were being erroneously used in building the library.

    Bug 31562

  • The BigWorld SQLite library wrapper has been cleaned up to allow better integration from a variety of programs. Previously using this library involved only including the sqlite/sqlite_util.hpp header. This header has been removed and replaced by a separate header for both the SqliteConnection and SqliteStatement classes, sqlite/sqlite_connection.hpp and sqlite/sqlite_statement.hpp respectively.

    Bug 31556

  • The AoI radius for entities is no longer restricted to 500m. The limit can now be set using the CellApp configuration option maxAoIRadius. Refer to CellApp Configuration Options for more details.

    ghostDistance, maxAoIRadius and defaultAoIRadius can take any positive float value. maxAoIRadius must not be greater than ghostDistance, and defaultAoIRadius must not be greater than maxAoIRadius.

    Increasing the value of maxAoIRadius reduces the precision of the entity position data sent to the client. For example, doubling maxAoIRadius will reduce the precision of this data by half, whereas halving it will double the precision.

    Bug 31666

  • Replaced bw.xml option reviver/timeoutInPings with reviver/timeout. This is now specified in seconds.

    Increased the default timeout period from 0.5 seconds to 3 seconds.

    Bug 31929

4. Bug Fixes

  • The default value for non-persistent properties in a FIXED_DICT are now read from the type's <Default> section when loading from the database. For details about the FIXED_DICT data type and setting default falues for it, refer to the Server Programming Guide section FIXED_DICT Data Type.

    Ticket 2909

  • Fixed a bug with bwmachined when the default broadcast route is a multihomed interface. For details on how to setup the default broadcast route, refer to the Server Installation Guide section Routing.

    Bug 27742

  • Fixed a bug where method calls between a cell entity and its associated base entity would take longer to be transmitted if the entity was a player entity than if there was no attached player.

    Bug 31546

  • Fixed a bug where corrupt log files could cause the LogViewer module of WebConsole to try to endlessly try to read log entries, giving an error message upon each failed attempt.

    This would cause spam of this message in the WebConsole log files, which could lead to disk space issues.

    Bug 31715 / Ticket 3377

  • Improved performance of streaming FIXED_DICT and ARRAY method arguments that are dynamically created. For example a nested custom FIXED_DICT implementation could have its getDictFromObj() method called 3 times rather than once. For more details on these types, refer to the Server Programming Guide section Composite Types.

    Bug 31741 / Ticket 3288

  • Fixed a bug that would cause Command Watcher responses to fail if the response was greater than 64k bytes.

    Bug 31930

  • The Entity.onEnteredAoI() callback is now no longer called when offloading a Witness. Refer to Client Python API for details on the onEnteredAoI() callback method.

    Bug 31787

  • There is no longer a limit on the number of unique model types that can be loaded by the server. It was previously limited to 32768.

    Bug 32026

  • Fixed a bug where WebConsole would try to read the wrong StatGrapher preferences file after installation, and always treat the StatGrapher preferences file as needing to be reloaded on every access. For more details about WebConsole and StatGrapher, reger to the Server Operations Guide section WebConsole.

    Bug 31948

  • Fixed a bug where long stream descriptions could stall auxiliary data streams to clients in low per-client bandwidth situations even if sufficient bandwidth was available to stream the data itself. For details about streaming auxiliary data, refer to the Server Programming Guide section Sending Auxiliary Data to the Client Via Proxy section .

    Bug 31892 / Ticket 3454

  • Fixed a bug where globalData, baseAppData or cellAppData could temporarily revert to an older state after a change was made. This could occur when there were multiple change messages travelling to the manager at once. For details about global data, refer to the Server Programming Guide section Global Data.

    Bug 32117

  • Resending of only reliable data from lost packets between client and server was disabled in BWT 1.9.4. This has now been re-enabled, which should reduce bandwidth usage in high packet loss situations. For details about reliable and unreliable data, refer to the Server Programming Guide section Bandwidth Optimisation: Is Reliable.

    Bug 27694

  • Packets dropped by the artificial packet-loss simulation code are now correctly counted in the "Packets Sent" and "Bytes Sent" watcher values of a NetworkInterface. For more details about introducing artificial packet loss, refer to the externalLossRatio entry in the Server Operations Guide section General Configuration Options.

    Bug 32242

  • Fixed a bug where, if a teleport failed, the entity's position and direction would be incorrectly set to the given destination position and direction. This could occur when the mailbox addressed a non-existent CellApp. For more details about teleporting, refer to the Entity.teleport() method entry in the Client Python API.

    Bug 32494 / BW-19545

  • Fixed a bug where concurrent giveClientTo() requests to the same proxy entity could result in failing a development assertion and failing to call back the Proxy.onGiveClientToFailure() callback. For details about the giveClientTo() method, refer to the Server Programming Guide section Proxies and Players.

    Ticket 3821 / Bug 32616

  • Fixed some bugs related to BaseApp retirement. Channels from offloaded proxy entities to clients are now condemned rather than being destroyed straight-away, enabling packets critical to switching BaseApps to be re-sent.

    Additionally, it was previously possible for some entities to be missed when offloading entities from a retiring BaseApp.

    For more details about BaseApp retirement, refer to the Server Operations Guide section BaseApp Retirement.

    Bug 32518

  • Fixed a bug in the offline patcher: if either the source or destination trees contained zip files, the resulting patch would cause crashes when being applied or another revision was being added. Offline patching is documented in ????.

    Bug 32617

  • Fixed a possible bad Base entity state during restoration of Cell entities when two or more CellApps die simultaneously, leaving the Base with a Cell mailbox pointing to a non-existent CellApp.

    Bug 32827

  • Fixed an issue that could cause a CellApp crash when entities with non-volatile position updates are on board a moving vehicle. Previously, the event history on ghosted entities could become out-of-sync from the event history of the real entity.

    Bug 32831

5. Deprecation Notices

5.1. Script API

  • The BaseApp method BigWorld.quantumPassedPercent() has been deprecated. It is still available but may be removed in a future release.

    To update your code, use the new method BigWorld.isNextTickPending(). This new method returns a boolean indicating whether the current tick has exceeded its assigned execution time. This new method differs from quantumPassedPercent() which returned an integer between 0 an 100. Any calculations will need to be updated accordingly.

    Bug 26863

  • The personality callbacks onBaseAppReady, onCellAppReady and onDBMgrReady have been deprecated by BWPersonality.onAppReady.

    Similarly, onBaseAppShuttingDown, onBaseAppShutDown and onCellAppShuttingDown have been replaced by BWPersonality.onShuttingDown and BWPersonality.onShutDown.

    These deprecated events are still available but may be removed in a future release.

    Bug 31543

5.2. Web Integration

  • The original Python module implementation of the BigWorld server Web Integration, located in bigworld/src/server/web/python, has been deprecated. It is currently planned to remove this in BigWorld Technology 3.0.

    To update your code, it is recommended to use the new Web Service approach using ServiceApps and two way method calls as outlined in Server Web Integration Guide.

    Documentation for this deprecated functionality has been removed in this release. Please refer to the 2.0 documentation if you require the old documentation.

    Bug 32611

6. Known Bugs & Limitations

  • If running the BigWorld Technology Server on a VMWare host, ensure that the Network Adapter has been set to E1000. Using the VMNet interface types can cause dropped UDP packets and will result in server process failures.

  • MySQL 5.1 does not support Unicode characters outside the Basic Multilingual Plane (BMP) defined in Unicode Version 3.0 in its UTF8 character string data type. This implies that BigWorld also does not support persistence of characters outside the BMP. MySQL reports that this bug will be resolved in MySQL version 6.0, however, as it has not been released, no testing has been done.

  • When mapping a space's geometry more than once, problems might occur with User Data Objects, multiple User Data Objects will share the same GUID.

    Bug 27018

  • If a shell without the bottom side in its BSP is placed on an outside chunk, NavGen cannot generate a navmesh on both the shell and the outside chunk correctly. Navigation will fail if an entity attempts to navigate in this shell.

    Bug 27510

BigWorld Technology 2.0.8 Server Release Notes


1. New Features

  • Improved the bandwidth usage of method calls and property updates sent from the server to the client. Savings will typically be between 2 and 6 bytes per message.

    Two main optimisations have been implemented. Previously each script message included the entity id. This is now done separately so that multiple messages can share this data. For entities with a volatile position, four bytes are saved. For non-volatile entities, typically 2-4 bytes are saved; 2 for the first message and 4 for subsequent messages.

    The second optimisation is dropping the size prefix for any script messages that are constant size. For these messages, 2 bytes are saved. For variable size messages, 1 byte is now saved.

    Bug 32152 and Bug 32638

  • Ghosted cell entities can now have set_* style callbacks called when ghosted properties change on the real entity. These optional callbacks take the same form as the client-side set_* callbacks. For more information, please refer to the Property Callbacks On Ghosted Entities.

    Bug 32654

2. Bug Fixes

  • Fixed an issue where concurrent giveClientTo() requests to the same proxy entity could result in failing a development assertion and failing to call back the Proxy.onGiveClientToFailure() callback.

    Ticket 3821 / Bug 32616

  • Previously, database transactions could be lost if the MySQL database was stopped and then restarted. This has been fixed so that these transactions will always be applied when the MySQL database is restarted.

    Bug 32647

  • In 2.0.7, a new feature was added allowing extra information to be sent back to the client on a successful login. This was not being sent when successfully logging on to an already loaded entity. This has now been fixed.

    Bug 32552

  • Added "nub" watcher to the Reviver process. Fixes an issue with doing Filtered Watcher queries that involve "nub" and all processes when a Reviver process is running.

    Bug 32640

  • Fixed a potential BaseApp crash if a Proxy is deleted while it was loading a file in a background thread. This is related to the use of Proxy.streamFileToClient().

    Bug 32021

  • Fixed a possible bad Base entity state during restoration of Cell entities when two or more CellApps die simultaneously, leaving the Base with a Cell mailbox pointing to a non-existent CellApp.

    Bug 32827

  • Fixed an issue that could cause a CellApp crash when entities with non-volatile position updates are on board a moving vehicle. Previously, the event history on ghosted entities could become out-of-sync from the event history of the real entity.

    Bug 32831

BigWorld Technology 2.0.7 Server Release Notes


1. New Features

  • When using a custom authentication system with DBMgr, it is now possible to send extra information back to the client on a successful login.

    This can be used, for example, to allow your authentication system to generate an authentication token when a successful username and password are first used. This token could then be passed on subsequent logins, avoiding the username/password step for players when using the same hardware.

    A second example is returning information about current account status (e.g. remaining credit).

    Bug 32552

2. Bug Fixes

  • Fixed an issue where attempting to create entities from within the BaseApp's Base.onRestore() callback could fail.

    Ticket 3786 / Bug 32482

  • Fixed an issue with WebConsole when using a MySQL database backend with a database type of InnoDB and a default character set of UTF-8. Previously WebConsole could fail to start due to a key size limitation error.

    Ticket 3820

BigWorld Technology 2.0.6 Server Release Notes


1. New Features

  • Added a new flag SendLatestOnly that can be set on properties that have OTHER_CLIENTS or ALL_CLIENTS flag (or client methods). If set to true, only the latest message for a property (or a method call) is sent to clients instead of a message for each change of that property (or repeated call of a method). This can be used to save bandwidth.

    Also added flag IsReliable for the same properties and methods. If set to false, these messages will be sent unreliably from the server to the client. If there is packet loss, this message will not be delivered.

    Setting SendLatestOnly to true and IsReliable to false and changing a value every game tick causes behaviour similar to volatile position and direction values.

    This feature can save considerable bandwidth is certain situations.

    Bug 28421

  • Changed the version numbering scheme sent from the client to the server during login. Previously, this was a monotonically increasing number (58 in BigWorld 2.0.5). This is now based on the BigWorld version number of the release it was last changed in. This is now 2.0.6 and will remain as this until a change in a future release.

    It is planned to release BigWorld 2.1.0 with protocol 2.0.6. This means that it should be possible to connect a 2.0.6 client to a 2.1.0 server (and vice-versa).

    Bug 32520

BigWorld Technology 2.0.5 Server Release Notes


1. Bug Fixes

  • Fixed a potential crash that could occur late in server shutdown. This crash was not serious but could leave core files around.

    Bug: None

  • Fixed baseApp/externalInterface configuration in bw.xml. Previously, this was using loginApp/externalInterface if it was specified.

    Bug: None

  • Fixed an issue with cell mailboxes on base entities when used after the cell entity has been requested to be created, but before Base.onGetCell() has been called. An exception is now raised when such a mailbox is assigned as a value to a MAILBOX property or it is used as a MAILBOX method argument. This was previously being allowed, leading to an assertion failure when the mailbox was used to call a method.

    Bug: 32024

  • Fixed a potential recurring relogin failure that could occur when a previous logout fails due to a DBMgr death.

    Bug 31881 / Ticket 3478

  • Enable buffering of createEntity messages on CellApps to ensure that a CellApp death doesn't cause the CellApp to which entities are restored to stop responding to, and be killed by, the CellAppMgr.

    Bug 32025 / Ticket 3559

  • Fixed a potential DBMgr crash that could occur when reviving a failed DBMgr while a writeToDB() request for a new entity was outstanding.

    Bug: None

  • Fixed an issue that could cause an incorrect reply to some network request messages. This was showing up as the callback for BigWorld.createBaseAnywhereFromDBID() being called with incorrect values.

    Ticket: 3607

  • Fixed an issue that would cause a base entity not to be backed up if Base.shouldAutoBackup is BigWorld.NEXT_ONLY when a Base entity is restored.

    Bug: 32154/Ticket: 3630

  • Fixed an issue where Base entities that were registered as a globalBase and were destroyed during the onRestore() callback would not have their globalBase entries removed.

    Bug: 32154/Ticket: 3630

  • Fixed an issue where Base entities that called deregisterGlobally() during the onRestore() callback would not have their globalBase entry removed.

    Bug: 32154/Ticket: 3630

BigWorld Technology 2.0.4 Server Release Notes


1. Changed Features

  • Client entity creation for non-volatile entities will now send detailed direction updates to the client for the initial entity creation message.

    Previously the initial entity creation message contained optimised low precision direction information which could cause an entity to face in an undesired direction.

    Bug: 31888

2. Bug Fixes

  • Downgraded an error message to a warning for missing file descriptors in the event poller. This is due to situations where normal usage of the web integration module caused this error to be emitted in benign cases.

    Bug: 31625 / Ticket: 3298

  • The BaseAppMgr's cellAppMgr watcher path is now correct after a CellAppMgr restart or revival.

    Bug: 31673

  • DBMgr now successfully loads fixed size persistent ARRAY properties that were added or had their size modified on an existing entity in a MySQL database.

    SyncDB does not populate fixed size ARRAY tables (eg: tbl_Avatar_newarray) with default values for all entries in the parent table. When the entity is loaded from the database the property will be adjusted, either adding default values or removing excess values from the end of the array, before streaming the entity to the BaseApp.

    Bug: 31673

  • Fixed a bug in code relating to the script call to Base.writeToDB() that could cause an invalid memory access, resulting in a segmentation fault.

    Bug: 31837

  • Fixed a problem that would cause BigWorld.addTimer() to lose precision when the game time gets larger.

    Additionally, the initialOffset and repeatOffset values are now rounded instead of truncated when converting to game ticks.

    Bug: 31851

  • Fixed a problem with batch Watcher queries that would fail when more than 1024 processes were queried in a single batch request.

    NB: This fix only applies to TCP watcher requests. The old UDP watcher request mechanism which is used in BigWorld Technology 1.9 server processes are still potentially susceptible to this issue.

    Bug: 31832

  • Fixed race conditions that could lead to a critical failure on the BaseApp due to the failure of the assertion pProxyPusher!= NULL.

    Bug: 31822

  • Fixed a bug where navigation could enter an infinite loop while doing an Astar search.

    Ticket: 3489

  • Fixed a bug where navigation may not return the optimal path because it gets an incorrect position from its neighbour.

    Ticket: 3489

  • Fixed a bug where the connection between two neighbouring chunks was incorrect because a chunk was not trying to find an exact match on the other side.

    Ticket: 3489

  • Fixed a bug where finding a navmesh for a given position may have only returned a navmesh if it was adjacent to another chunk.

    Ticket: 3489

  • Fixed a potential BaseApp crash when Base.destroy() was called from within the Proxy.onRestore() method.

    Bug #31911 / Ticket: 3502

  • Fixed a bug where two navmeshes on opposite sides of a chunk boundary might not be able to connect to one another if they differ in height.

    Ticket: 3489

  • Fixed some issues with the proxy rate limit message filter that could cause buffered proxy messages to be played back on the wrong proxy entities.

    Bug #31743

  • Fixed an issue where an invalid BaseApp address could be sent to the client when Proxy.giveClientTo() is called with a proxy on another BaseApp. A Python exception will now be raised in this case.

    Bug #31630

  • Fixed an issue where an entity might have slowed down during navigation when crossing a navmesh boundary.

    Bug #31907

BigWorld Technology 2.0.3 Server Release Notes


1. New Features

  • Added configuration option cellApp/maxTickStagger to bw.xml. This adds the ability to stagger the CellApp update ticks.

    If all CellApps are synchronised, the network load that can be produced by a cluster can be very spikey. Having each CellApp produce its traffic at offset times helps to spread the traffic out over time. This helps avoid packet loss for some network hardware.

    This packet loss is most likely to occur upstream in your connection to the internet. If a large amount of packet loss is noticed with a large number of clients connected, consider increasing this value.

    For more information on the maxTickStagger option, see the Server Operations Guide chapter Server Configuration with bw.xml.

    Bug 31621

  • Added a property Entity.artificialLoad to the cell entity. This allows an entity to add an artificial amount of load to the calculated load that is used for load balancing. It is useful if you have an entity or space that often has periods of low load but can quickly change. For further information see the CellApp Python API documentation.

    Bug 28438

2. Bug Fixes

  • Fixed an issue where destroying a Proxy during or soon after a giveClientTo() operation, could cause a BaseApp crash.

    Bug: 31617 / Ticket: 3301

  • Fixed an issue where the handler for BigWorld.registerWriteFileDescriptor() was not being called if an error occurred. Only calling of the read handler was attempted, even if there was only a write handle for that file descriptor.

    Bug 31684 / Ticket 3351

  • Added better tracking of relogin attempts as well as a timeout for old pending logins.

    Bug 31669

  • Fixed an issue with RPM building scripts where the output from SVN commands was not being properly read, causing the scripts to sometimes exit prematurely.

    No associated bug

BigWorld Technology 2.0.2 Server Release Notes


1. Changed Features

  • Previously when the bw.xml option <baseApp><backUpUndefinedProperties> was set to true, properties defined in the <TempProperties> section of the Entity definition file were still included in Entity backups. This behaviour has been changed so that the <TempProperties> are no longer backed up in any circumstance.

    Bug: 31505 / Ticket : 3077

2. Bug Fixes

  • Fixed an issue that could cause NavigationController instances added via Entity.navigate() to be ineffective, and cause a CellApp crash if it was called for a destination that was not navigable.

    Bug: None

  • Fixed an issue that could cause a DBMgr assertion if Base.writeToDB() is called twice quickly on a new entity that does not have a unique Identifier property.

    Ticket: 2958

  • Fixed an issue that could cause secondary DB consolidation to fail when an entity had been deleted from the primary database.

    Ticket: 2829

  • Fixed an issue that could cause DBMgr to crash when looking up an Entity by Identifier when the Entity definition did not describe an Identifier field. A script error is now thrown instead to warn the user of the mistake.

    Ticket: 2882

  • Fixed an issue with acknowledgements for physics corrections. Previously, it was possible for a development assertion to fail if a client was given to another proxy while a physics correction was on the wire.

    Ticket: 2928

  • Fixed an issue that could cause a CellApp to crash (assertion failure) when entities are offloaded soon after a new cell has been added to a space.

    Ticket: 2928

  • Fixed an issue with the offline patcher, where it would abort prematurely when attempting to patch an empty source file.

    Bug: 31484

  • Fixed a problem with bwmachined when the default broadcast route is a multihomed interface.

    Bug: 27742

  • Improved the robustness of calling Proxy.giveClientTo() to give a client connection a remote BaseApp's proxy via a mailbox. This was previously unreliable under packet loss.

    Bug: 31509 / Ticket : 3076

  • Fixed a crash that could occur if there was packet reordering (potentially due to loss) on a multi-packet bundle when not sent on a channel. This is most likely to occur if using the server's Web Integration.

    Ticket: 3104

  • Fixed an issue causing some of the network-related statistics with exponential averages to be wrongly calculated.

    Bug: 31492

  • Fixed an issue with DBMgr's MySQL implementation that could cause streaming errors if a transaction rollback occurred during the middle of an entity read or write.

    Bug: 31513 / Ticket: 3113

  • Fixed an issue with StatLogger crashing when working with a data set describing more than a year's worth of samples.

    Bug: None

  • If a player and a non-volatile entity were teleported together using the cell entity's Entity.teleport() method, it was possible that the client may not be updated with the correct space of the non-volatile entity. This has now been fixed.

    Bug: 31508 / Ticket: 3085

  • Fixed a problem where acceleration movement controllers (accelerateToPoint, accelerateToEntity, and accelerateAlongPath) with a facing style of FACING_VELOCITY would reset the yaw to 0 when it arrived at the destination point, if the stopAtDestination parameter was True.

    Bug: 31512

  • Fixed an issue with using negative indices for subscription and slice accesses for ARRAY typed values that could lead to memory corruption.

    Bug: 31535

  • Fixed an issue where a multiple writeToDB requests for a new Entity could be incorrectly buffered which would lead to a DBMgr assertion.

    Bug: 31584 / Ticket: 3209

BigWorld Technology 2.0.1 Server Release Notes


1. Bug Fixes

  • Added missing files in the Full Source package that were preventing the package from being compiled.

BigWorld Technology 2.0 Server Release Notes


1. Overview

  • BigWorld Technology 2.0 is the latest version of the BigWorld Technology engine.

2. Important Notes

  • The release number system has changed. Previously, there were two digits assigned to a major release version (e.g. 1.9), an extra digit for the minor release version (e.g. 1.9.6) and a final, fourth digit for the patch version (e.g. 1.9.6.7). Major release versions now have a single digit. The full version number now has three digits (e.g. 2.0.0).

  • In order to make the source code location for BigWorld components consistent, the trunk/src directory has been moved to trunk/bigworld/src. This needs to be considered when merging source code changes from previous versions to the latest version.

3. New Features

3.1. Script & Script API

  • A number of new features have been added to help working with multiple spaces.

    Base.createCellEntity() now accepts a base mailbox in place of the cell mailbox. This makes it easy to find the creation location in BigWorld.globalBases.

    The __init__ methods of cell entities will now be given the entity that was used in Base.createCellEntity(). This allows setting of the initial entity location on the cell entity rather than via the base entity's cellData[ "position" ].

    A new script method Base.teleport() has been added. It takes a base entity mailbox that indicates the entity that this entity should be teleported to. Entity.onTeleportSuccess() is called on success and is passed the destination entity. This is useful for setting the position of the teleporting entity.

    Bug 27418

  • Added BigWorld.addTimer() and BigWorld.delTimer() script methods to CellApp.

  • Added BigWorld.getSpaceGeometryMappings() to CellApp, which retrieves the client-server geometry mappings for a space.

    Bug 27871

  • BigWorld.globalBases, BigWorld.baseAppData, BigWorld.cellAppData and BigWorld.globalData now have a get() method like Python dictionaries.

    Bug 27764

  • ARRAY data type instances now have a method equals_seq() for performing Boolean equality testing against an arbitrary Python sequence. This alleviates the need to cast ARRAY instances into appropriate types prior to performing an equality test with Python lists and tuples.

    Bug 27864

3.2. Entity Definitions & Property Types

  • Added a new data type, UNICODE_STRING, which allows assignment of Python Unicode string objects. Persistent UNICODE_STRING properties require 3 bytes per character for storage in MySQL. The BigWorld MySQL database now use UTF-8 as their character set, as do the connections to those databases.

    For more information, please refer to the STRING, UNICODE_STRING, BLOB, and PYTHON Data Types.

  • A new section <TempProperties> is now supported in .def files to allow specifying properties that are not backed up or offloaded. These should generally be rare but are useful for properties that cannot be streamed such as sockets or properties that are recreated on restoring.

    Bug 20228

  • ARRAY data type instances now have a method equals_seq() for performing Boolean equality testing against an arbitrary Python sequence. This alleviates the need to cast ARRAY instances into appropriate types prior to performing an equality test with Python lists and tuples.

    Bug 27864

3.3. Database & Billing Systems

  • It is now a lot easier to integrate an external billing system and account authentication with the BigWorld server. This can be done in Python or C++ in DBMgr.

    Bug 27583

3.4. FantasyDemo & Examples

  • FantasyDemo XMPP integration. The FantasyDemo client is now also a lightweight XMPP client which can send/receive messages and presence notifications to any other XMMP client (e.g. GAIM, Pidgin). This is an example of connecting to external service in a non-blocking manner via BigWorld.registerFileDescriptor().

3.5. Fault Tolerance & Disaster Recovery

  • Added Entity.shouldAutoBackup property. This allows disabling automatic backing up of cell entities to their base entity.

    Bug 26377

3.6. Cluster Management

  • BaseApps can now be retired while the server is running. Base entities are offloaded to other BaseApps, and connected clients are transparently reconnected to their proxy entities on destination BaseApps. To trigger a BaseApp retirement, there is a new Retire App action in the action menu for BaseApps in WebConsole/ClusterControl. There is also a new retireproc command for the control_cluster.py command line tool.

    See the Controlled Startup and Shutdown for more details.

    Bug 24187

3.7. Miscellaneous

  • The server now uses epoll instead of select to wait for network activity. This improves the scalability of the BigWorld.registerFileDescriptor() implementation.

    Bug 25734

  • Watchers can now be fetched via TCP. Previously, only UDP was supported. This caused there to be a maximum size for the watcher query results.

    Bug 6353

  • There are now options to compress some of the network traffic. See the networkCompression options in bw.xml for more details.

    Bug 27744

4. Changed Features

4.1. General

  • In order to make the source code location for BigWorld components consistent, the trunk/src folder has been moved to trunk/bigworld/src. This needs to be considered when merging source code changes from previous versions to the latest version.

    Bug 10156

  • The internal Python library has been updated to version 2.6.4.

    Bug 27310

  • The SQLite library has been upgraded to version 3.6.23.

  • The CPU time spent in the main thread while loading chunks is 5 to 10 times less than before.

    Bug 27401

  • Navigation meshes in memory are now more compact through the use of an indexing scheme for the vertices in nav-poly edges.

    Bug 27787

4.2. Script & Script API

  • The Proxy.giveClientTo() method can now accept a base mailbox to a proxy on a remote BaseApp for transferring the client. This relaxes the restriction that the destination proxy has to reside on the same BaseApp as the source proxy.

  • BigWorld.PatrolPath has been removed. User Data Object PatrolNode should be used for creating patrol paths in space.

  • The Cell entity property Entity.aoiPriority has been removed. This has been replaced by the Entity.aoiUpdateScheme property and Entity.setAoIUpdateScheme() method. These allow greater control of the update rate based on distance and also allows specifying for a specific instance of an entity in an AoI.

    Bug 27230

  • There is a new scripts path server_common under the resource path scripts. Modules placed here can be loaded by the BaseApp and CellApp, as well as DBMgr for importing modules used with class-customised data types. This is intended for Python modules that are common between server components, but are not distributed with the client.

    Bug 23026

  • The deprecated Base.contactDetails property has now been removed.

    Bug 27662

  • Fixed a bug where the CellApp personality callback onAllSpaceGeometryLoaded() was not being called back when auto-loading space data from the database.

    Bug 27871

  • The script method Entity.addPortalConfig has been replaced by Entity.setPortalState.

    An identical method has been added to the client entity.

    Bug 26400

4.3. Entity Definitions & Property Types

  • <Volatile> settings can now be placed in interface .def files.

    Bug 26039

  • The bw.xml option, baseApp/backUpUndefinedProperties now defaults to false. It is recommended that each property requiring backup should be included in the entity's .def file.

    Bug 20228

4.4. Database & Billing Systems

  • A number of bw.xml options have changed.

    • dbMgr/createUnknown is now billingSystem/shouldAcceptUnknownUsers.

    • dbMgr/rememberUnknown is now billingSystem/shouldRememberUnknownUsers.

    • dbMgr/loadUnknown has been replaced by billingSystem/authenticateViaBaseEntity.

    • dbMgr/entityType is now billingSystem/entityTypeForUnknownUsers.

  • Added configuration option billingSystem/isPasswordHashed to bw.xml. This indicates whether the password stored in the database's bigworldLogOnMapping table is hashed.

    Note

    This is option is true by default. Running sync_db will convert existing passwords.

    It is not possible to restore the original passwords once this is performed.

    Bug 14763

  • Modified the database's bigworldLogOnMapping table to store the entityID of the associated entity rather than the identifying property. This means that it is no longer necessary for these entity types to have an identifier property.

    Also, the typeID column in this table was renamed to entityType.

  • The default collation associated with UNICODE_STRING properties in the MySQL database is now utf8_bin. The collation can be changed by using the dbMgr/unicodeString/collation option in bw.xml.

    Bug 27666

4.5. Fault Tolerance & Disaster Recovery

  • The bw.xml option useDefaultSpace now defaults to false. A number of new features have been added to help work with multiple spaces. See New Features.

    Bug 27418

  • Persistent entities can now be individually flagged for auto-loading by the database on server startup. Previously, all persistent entities that were checked out at the time of the last server shutdown were auto-loaded. The following changes were made to support this:

    • A new argument to the Base.writeToDB() method, shouldAutoLoad, can be used to indicate whether an entity should be auto-loaded by the database when the server starts up.

    • The BWPersonality.onBaseAppReady() callback is now called with two Boolean arguments instead of the one argument in previous versions. The first argument remains as the isBootstrap argument, set to True for the bootstrap BaseApp. The new second Boolean argument indicates whether the database has auto-loaded any entities or not.This is useful for seeding persistent entities into a newly created database.

    • The bw.xml option dbMgr/clearRecoveryData has been removed. Instead, a new tool called ClearAutoLoad can be used to clear the auto-load data when needed (located at bigworld/bin/Hybrid64/commands/clear_auto_load).

    Bug 21519

  • Auto-loading entities and spaces on the XML database is now supported.

    Bug 28022

4.6. Watchers

  • Watcher values in the debug and debugging directories have all been moved to either the config or logger directories.

4.7. Server Tools

4.7.1. Message Logger

  • The logger ID associated with processes for the purposes of logging with MessageLogger has been changed from an integer type to a string type. This option is set for logging processes in bw.xml as the loggerID option, and MessageLogger filters LoggerIDs via the -l command line option.

    The shipped init-script for MessageLogger does not use the -l command line option. Developers who are not using the shipped init-script for starting MessageLogger should check that if they use -l option but do not wish to use the LoggerID filter, they should set it to an empty string instead of "0".

5. Bug Fixes

  • Fixed an issue that could cause messages destined for an old client to be delivered to a new client when an entity is taken over via BigWorld.onLogOnAttempt().

    Bug 26908

  • Loading of files required by User Data Objects is now done on startup instead of on first use, avoiding file access from the main thread when the first User Data Object is created.

    Bug 17451

  • Fixed bugs in entity def files that use True or False as the default value of property type BOOL. BOOL is actually an alias of UINT8 so it only accepts 0 or 1 as its value. Also, a warning message will be printed if trying to intepret a non-integer string value as an integer when reading it from data section.

    Bug 25794

  • Restoring cell entities from a BaseApp when a CellApp dies is now spread out over time. This avoid a problem where the BaseAppMgr could kill a BaseApp because restoring was taking too long.

    Bug 25821

  • Fixed a problem where the Entity.onLeavingCell() callback, triggered via a teleporting entity, was called while there was a partially constructed message on the channel to the destination CellApp. If this callback generated any traffic on this channel, the teleport message would be truncated and crash the destination CellApp.

    Bug 27350

  • Fixed a bug where entity navigation cannot pass the space geometry boundary when space geometries are loaded with a transform.

    Bug 26963

  • Improved the calculation of the downstream bandwidth. Previously, some internal traffic from the cell entity to the base entity was being counted in the downstream calculation, reducing the amount sent to clients.

    Bug 26912

  • Fixed an issue that could potentially affect users attempting to relogin while their existing Proxy was still online. It was possible that relogin attempts would never succeed and subsequent login attempts would fail reporting that a previous relogin attempt was still in progress.

    Bug 27642

  • Fixed a bug that caused the position of passenger entities to be wrong on the server when the vehicle had non-zero pitch. The server was interpretting pitch in the wrong direction.

    Bug 27031

  • Fixed an issue where LogViewer could fail to query logs when the WebConsole server existed in a different timezone to the browser that performed the query.

    Ticket #2277

  • Fixed an issue where DBMgr could prematurely stop waiting for the sync_db process to terminate, causing hangs when shutting down.

    Ticket #2431 / Bug 27940

6. Known Bugs & Limitations

  • MySQL 5.1 does not support Unicode characters outside the Basic Multilingual Plane (BMP) defined in Unicode Version 3.0 in its UTF8 character string data type. This implies that BigWorld also does not support persistence of characters outside the BMP. MySQL reports that this issue will be resolved in MySQL version 6.0, however, as it has not been released, no testing has been done.

  • When mapping a space's geometry more than once, problems might occur with User Data Objects, multiple User Data Objects will share the same GUID.

    Bug 27018

  • If a shell without the bottom side in its bsp is placed on an outside chunk, NavGen cannot generate a navmesh on both the shell and the outside chunk correctly. Navigation will fail if an entity attempts to navigate in this shell.

    Bug 27510

BigWorld Technology 1.9.6.12 Server Release Notes


1. Bug Fixes

  • Fixed an issue where some cells could be unable to create ghosts or offload entities onto an adjacent cell. This could have occurred if a cell was retired using SpaceViewer, and was quickly re-added to the same space.

    Bug: 28164

  • Fixed an issue where acknowledgements that were destined for an old network channel could be processed by a new channel. This could occur if a cell entity is destroyed and then quickly recreated in a high loss environment.

    Bug: 28275

  • Fixed an issue that could leave an entity channel in a bad state after base entities have been restored. If this occurred, WARNING messages like the following would be seen repeatedly from a CellApp.

    Channel::addToReceiveWindow( 10.40.1.101:36772/4462 ): Dropping packet from old channel 10.40.1.101:36772 (v0 < v1)

    Bug: 28187

  • Anonymous channels no longer time out if the local process was the one that paused for longer than the timeout period. Previously, if DBMgr blocked for greater than 60 seconds, it would drop its anonymous channels such as the channel from the LoginApp.

    Bug: 28126

  • Fixed an issue that would cause time synchronisation to no longer work after a CellAppMgr had been restored. This would mean that the game time of CellApp and BaseApp processes could slowly drift apart after this.

    Bug: 28190

BigWorld Technology 1.9.6.11 Server Release Notes


1. Bug Fixes

  • Fixed an issue with CellApp that could cause problems when restoring cell entities that were buffered due to high load. If CellApp load was consistently high, it might have been a long time before all the pending entity restorations were processed. It was possible for the cell to be removed in the meantime, causing those cell entities to never be restored.

    Bug: 28025

  • Fixed a race condition between when CellAppMgr adds a cell to a CellApp, and other CellApps offloading or creating ghosts on that CellApp. Previously, this could cause assertion failures with ghost message buffering.

    Bug 28036

  • Fixed a race condition in DBMgr startup which could result in tasks being processed before initialisation had been completed.

    Bug 28051

  • Fixed a problem that caused the player's client entity to not be moved into the new space if the cell entity was teleported while Entity.controlledBy == None.

    Bug 28064/Ticket 2465

  • Added an assertion to guard against when an anonymous channel is recreated after being timed out after 60 seconds. It is undesirable to continue running as data will have been lost.

    This avoids side-effects occurring later, such as when a CellApp channel to another CellApp times out causing CellApps to become incapable of on-loading entities.

    Bug 28126 / Ticket 2530

BigWorld Technology 1.9.6.10 Server Release Notes


1. Bug Fixes

  • Fixed an issue with DBMgr that could cause a new persistent entity to be written multiple times to the database.

    Bug: 26916

  • Fixed an issue that could leave DBMgr in a state where a base entity is reported as being online after it has been destroyed. This could occur if the base entity was destroyed immediately after being written to the database for the first time.

    Bug: 27964 / Ticket: 2464

BigWorld Technology 1.9.6.9 Server Release Notes


1. Bug Fixes

  • Fixed an issue introduced by the patch done in 1.9.6.8. This could cause an assertion to fail when a cell is removed from a CellApp.

    Bug: 27915/Ticket: 2416

BigWorld Technology 1.9.6.8 Server Release Notes


1. Bug Fixes

  • Fixed a rare race condition that could occur in extreme cases where cells from CellApps are being added and then removed repeatedly under heavily-loaded situations. Previously this could cause an assertion to fail when processing ghost messages.

    Ticket: 2416

BigWorld Technology 1.9.6.7 Server Release Notes


1. Bug Fixes

  • Fixed an issue where a base entity may not be able to be destroyed because it is waiting for its cell entity to be destroyed first. This is caused by a call to Base.giveClientTo(), which can cause subsequent messages on the same bundle to be dropped. This can include the notification that the cell entity has been destroyed.

    Bug: 27875

  • Fixed an issue in the networking layer which could cause crashes due to assertion failures relating to "Mangled fragment footers".

    Bug 27891 / Ticket 2379

  • Fixed an issue where applications could be incorrectly processing packets on a channel from a previous channel version. In particular, this could cause the base entities to process packets from a previous incarnation of a recently destroyed cell entity as if it came from a newly created cell entity.

    Bug 27898 / Ticket 2383

BigWorld Technology 1.9.6.6 Server Release Notes


1. Bug Fixes

  • IMPORTANT: Fixed an issue that could cause corrupted data to be written to and read from the MySQL database.

    This was caused by a patch done in 1.9.6.5. It is important to upgrade from BigWorld 1.9.6.5.

    Bug: 27827

  • Fixed an issue with using sync_db with MySQL 5.1.

    Bug: 26533

BigWorld Technology 1.9.6.5 Server Release Notes


1. Bug Fixes

  • IMPORTANT: Fixed an issue that could cause corrupted data to be written to the MySQL database.

    This could occur if an entity has an ARRAY of ARRAY property and many of these entities are written at the same time. If MySQL database lock contention requires the transaction to be repeated, the second attempt could have contained incorrect data.

    Bug: 27827

  • Fixed a potential CellApp assertion that could occur if entities were teleported together immediately after enter each other's Area of Interest.

    Ticket #2304/Bug 27861

  • Fixed an issue where cell entity creation could fail when CellApp backups were disabled.

    Ticket #2025

  • Fixed an issue where some sequences of buffered ghost messages on the CellApp were being played back incorrectly. This could cause assertions to fail later.

    Bug 27851

  • Fixed an issue where the client could crash while trying to connect to the server if a previous login attempt failed while contacting the BaseApp.

    Bug 27866

BigWorld Technology 1.9.6.4 Server Release Notes


1. Bug Fixes

  • Fixed an issue where an entity that is teleporting into an indoor chunk newly created space may cause movement issues. This may occur if the indoor chunk had not been loaded at the time the teleporting entity was placed into the space.

    Ticket #2110

  • Fixed a problem that could cause User Data Objects to be unloaded too early. This would occur when there are multiple spaces that have the same geometry mapped. If one of these spaces was unloaded, the User Data Objects for all spaces would be unloaded.

    Bug: 27714

  • Fixed an issue where requesting a slice by only providing the start index could return an empty list, for example entity.listProp[1:].

    Ticket #1959

  • Fixed a memory leak in DBMgr introduced by the addition of BufferedEntityTask in BigWorld 1.9.6.0.

    Ticket #1951

  • Fixed a problem caused by calling Base.createCellEntity() with a cell mailbox that has not yet been initialised. A base entities cell mailbox is only properly initialised when its Base.onGetCell callback is called.

    Bug 27381

  • Fixed a problem that could cause teleporting an entity to fail. Previously, when an entity teleports between two CellApps that have not communicated prior to the teleport, if the first packet is dropped, the channel may be in a bad state and the teleport information could be stuck on the channel indefinitely.

    Ticket #1859 / Bug 27379

  • Fixed an issue with base entities getting into a state where they could not be destroyed due to a pending cell entity destroy operation. The timeout for condemned channels has been extended to prevent premature dumping of un-acknowledged pending outgoing packets on condemned channels.

    Ticket #1633

  • Fixed a problem introduced in 1.9.6.3 that can cause a CellApp crash if a cell is removed from a space and then reintroduced before chunks that were loading had been discarded.

    Bug 27611

  • Fixed an issue with server controlled Witnesses receiving incorrect position updates when being a passenger.

    Bug 27262

  • Fixed a rare assertion that could occur when network loss was occurring and the number of buffered packets exactly matched the size of the buffered packets array.

    Bug 27262

  • Fixed a bug with sending oversized Mercury message requests. Previously, the sending side was clobbering the length field in a variable length message, causing crashes on the receiving side.

    Bug 27660

  • Fixed a bug that could cause out-of-order property updates being sent down to the client when an entity changes detail levels, or when two entities teleport together.

    Bug 27687

  • Fixed a memory leak caused by requests on channels.

    Bug 27700

  • Fixed an issue when player entities in the same AoI teleport together. Previously, there was a chance that some updates on properties made just before the teleport were not being propagated on the next update after they finish teleporting into the new space.

    Bug 27710

BigWorld Technology 1.9.6.3 Server Release Notes


1. Bug Fixes

  • Fixed a problem that could cause sub-elements of properties of ghost entities to not be updated.

    Bug 27353

  • Fixed a potential CellApp crash caused by a race condition when creating and removing cells.

    Bug 27309

  • Fixed a bug that could cause incorrect space data to be associated with a space. If a cell was removed from a space and then added back shortly after, old space data values that should have been removed during that period of time were still being kept.

    Bug 27342

BigWorld Technology 1.9.6.2 Server Release Notes


1. Bug Fixes

  • Added the missing src/lib/third_party_integration library and bigworld/src/server/web library.

    Ticket # 1799

BigWorld Technology 1.9.6.1 Server Release Notes


No changes were done for this version.

BigWorld Technology 1.9.6 Server Release Notes


1. Overview

  • BigWorld Technology 1.9.6 is the latest version of the BigWorld Technology engine. This version contains multiple bug fixes which do not require complicated merges. Future 1.9 releases are expected to mainly contain bug fixes.

2. Executive Summary

  • Multiple bug fixes were done in this version.

3. New Features

  • Added new methods BigWorld.navigatePathPoints() and Entity.navigatePathPoints().

    These methods perform a navigation search without moving the entity. The returned list of points from source to destination are the same as the points the entity would move to using navigateStep().

    Bug 26880

  • Added options to periodically save and archive the XML database.

    Bug 27118

  • Added Base.shouldAutoBackup property. This allows disabling of automatic backing up of base entities to other BaseApps.

    Bug 27074

  • Added Base.shouldAutoArchive property. This allows disabling of automatic archiving up of base entities to the database.

    Bug 27074

4. Changed Features

  • The constant BigWorld.SHOULD_AUTO_BACKUP_NEXT_ONLY has been renamed to BigWorld.NEXT_ONLY. This constant is used for the shouldAutoBackup property for base and cell entities, and the shouldAutoArchive property for base entities.

    Bug 27074

5. Bug Fixes

  • Set the log level severity for the error message "Failed to get stream on client method" to be more appropriate under conditions where the underlying cause is expected.

    There can be a small time window after a proxy entity loses its client (either by disconnection, timeout, or via script) and before the cell entity has been informed about this change of state, where the cell entity has sent down to the proxy messages intended for the client. In this case, these messages are dropped (as they were previously), but now they are NOTICE level messages if they occur within an arbitary short period of time (currently 1 second).

    Bug 27090 / Ticket 1510

  • Added extra checks to ensure that mailboxes are never sent on network channels that point to an invalid address. This was causing assertion failures to occur occasionally if the address was set to Address::NONE.

    Bug 26845 / Ticket 1340

  • Added some extra checks if a bounding box was inside-out for a resource being loaded, with extra log messages identifying that exact resource. This was previously causing assertion failures on the server.

    Bug 27023 / Ticket 1491

  • Added comparison functions for ARRAY and FIXED_DICT objects, previously instances of these property types would always compare False.

    Bug 26958 / Ticket 1447

  • self.myArray[:] now generates a new list instead of returning self.myArray for ARRAY properties.

    Ticket 1616

  • mlcat.py will now work correctly when specifying a log directory to read from if no configuration files are readable on the system.

    Bug 27172

  • Fixed player-controlled entites not being able to move in client-only spaces if the physics checking is enabled via setting topSpeed.

    Bug 27251

  • Fixed an issue that could occur if 32768 or more controllers are added to an entity. Controllers could have been allocated the same id as a movement controller. Adding a movement controller would incorrect cancel another controller.

    Bug 27283

  • Fixed Python reference leaks in Entity.withholdFromClient, Entity.isWithheldFromClient and Entity.isInAoI.

    Bug 27306

6. Known Bugs & Limitations

  • An issue exists where performing any operation that can modify an Entity's data (for example either property set operations or remote method calls) from within the Python BackgroundTask.doBackgroundTask() method may cause network packet corruption and in turn a process crash.

    To avoid this issue, when using Python BackgroundTasks perform all entity modifications and interactions from within the BackgroundTask.doMainThreadTask() callback.

    Bug 27288

  • Python hashlib does not function correctly in Bots process or BaseApp due to an incompatibility between versions of OpenSSL.

    Bug 21059

  • Secondary Databases

    • When secondary databases are enabled and the final writeToDB operation is disabled by passing False in the writeToDB parameter of the Base.destroy function, all writeToDB operations on the entity since the entity was loaded from the database may be disregarded. For example:

      1. Entity A is loaded from the database

      2. Entity A's properties are changed.

      3. Entity A is written to the database by calling the Base.writeToDB method.

      4. Entity A is destroyed by calling the Base.destroy method but False is passed in the writeToDB parameter.

      The writeToDB operation in step 3, may be disregarded and the changes to entity A's properties in step 2 will be lost.

      There is no guarantee that the changes will be lost so this cannot be used as a rollback facility. If the system is shutdown soon after the entity is destroyed (with writeToDB = False), then the changes to the entity may be retained.

      The correct behaviour should be to retain all the changes that were supposedly written to the database using the Base.writeToDB method. BigWorld will conform to this behaviour in a future release. In the meantime, passing False in the writeToDB parameter to the Base.destroy method should be avoided due to its unpredictable behaviour.

    • When using secondary databases on a Debian Linux distribution, the transfer_db script may silently fail due to a requirement of the python libxml2 module. When using secondary databases on Debian Linux please ensure to apt-get install python-libxml2 on all BaseApp machines.

    Bug 20612

  • This is associated with the Changed Feature regarding Identifier properties.

    In 1.9.1, we do not catch instances of setting identifier properties that exist on the cell entity (e.g. ALL_CLIENTS properties), as we do for identifier properties on the base entity. In addition, modifications to a cell entity identifier property in the Base.cellData base property (which exists if the cell entity has not been created) are also not checked.

    If an entity has been previously saved to the database successfully, and the identifier property on the cell entity (or the identifier property's entry in the cellData dictionary) subsequently changes, the next attempt to save to the database could fail due to the uniqueness constraint on that identifier property being broken in the event that another entity is keyed to the new value of the identifier property being set.

    Bug 19719

  • The file specified by resources.xml/system/terrain2 (by default, system/data/terrain2.xml ) is loaded each time that terrain is loaded. This can cause disk access in the main thread.

    To avoid this, load and store a reference to this file's data section in your cell's personality script. See fantasydemo/res/scripts/cell/FantasyDemo.py for an example.

  • The file specified by resources.xml/environment/materialKinds (by default, system/data/material_kinds.xml) is loaded the first time a collision test occurs that involves terrain. This can cause disk access in the main thread.

    To avoid this, load and store a reference to this file's data section in your cell's personality script. See fantasydemo/res/scripts/cell/FantasyDemo.py for an example.

  • The UserDataObjectRef module is loaded the first time that it is needed. This can cause disk access in the main thread.

    To avoid this, import this module into your personality scripts. See fantasydemo/res/scripts/cell/FantasyDemo.py and fantasydemo/res/scripts/base/FantasyDemo.py for examples.

  • FIXED_DICT properties that have an <implementedBy> can cause a module to be imported the first time that the type is created. This can cause disk access in the main thread.

    To avoid this, import the necessary modules in the script file of the relevant entities or the personality scripts.

  • MySQL stored procedures are not supported when used with the BigWorld.executeRawDatabaseCommand method.

    For details on this method, see the document Server Programming Guide's section The Database Layer -> Execute Arbitrary Commands On Database.

  • Due to the Watcher protocol changing as of 1.9.0, the server tools (WebConsole, StatLogger, ControlCluster, ...) are not backwards compatible. If your operational environment is still running 1.8.x servers it is recommended to maintain the existing server tools as forward compatibility has been maintained.

  • The 64-bit version of the server uses up to 50% more memory than the 32-bit version in some cases.

    Bug 24442

BigWorld Technology 1.9.5 Server Release Notes


1. Overview

  • BigWorld Technology 1.9.5 is the latest version of the BigWorld Technology engine. This version contains multiple bug fixes which do not require complicated merges. Future 1.9 releases are expected to mainly contain bug fixes.

2. Executive Summary

  • Navigation now works for a space loaded with a transform matrix.

  • Multiple bug fixes were done in this version.

3. New Features

  • Added Entity.shouldAutoBackup property. This allows disabling automatic backing up of cell entities to their base entity.

    Bug 26377

  • Added BigWorld.maxCellAppLoad() and BigWorld.load() methods to the CellApp. These are useful for deciding to disallow some script actions when the server is overloaded.

    Bug 26881

4. Changed Features

  • A fault tolerance issue existed where entity attributes would not exist on the restored BaseApp when Proxy.onClientDeath was called.

    This issue has now been fixed, however users will notice that Base.onRestore is now called prior to onClientDeath.

    No bug associated

5. Bug Fixes

  • Fixed an issue that could cause messages destined for the old client to be delivered to the new client when an entity is taken over via BigWorld.onLogOnAttempt.

    Bug 26908

  • Now ensuring that BigWorld.writeToDB calls are applied to the database in order. Previously, two operations to write an entity could be sent to the database and each one sent immediately to its own thread. Now, if one of these operations for an entity is outstanding, others are buffered until the first has completed.

    Bug 13927

  • Fixed an issue that would cause client/server property changes to be propagated incorrectly when an entity has more than 60 top-level client/server properties.

    Bug 27059 / Ticket 1504

  • An issue was fixed where the Reviver process would crash after having revived a process due to uncancelled timers.

    Bug 27028

  • Fixed an issue with BaseApp and CellApp reconnecting to a new DBMgr process, for example after reviving a dead DBMgr process.

    Bug 27040

  • Fixed a bug where navigation would not work if a space geomtry is loaded with a transform matrix.

    Bug 26963

6. Known Bugs & Limitations

  • Python hashlib does not function correctly in Bots process or BaseApp due to an incompatibility between versions of OpenSSL.

    Bug 21059

  • Secondary Databases

    • When secondary databases are enabled and the final writeToDB operation is disabled by passing False in the writeToDB parameter of the Base.destroy function, all writeToDB operations on the entity since the entity was loaded from the database may be disregarded. For example:

      1. Entity A is loaded from the database

      2. Entity A's properties are changed.

      3. Entity A is written to the database by calling the Base.writeToDB method.

      4. Entity A is destroyed by calling the Base.destroy method but False is passed in the writeToDB parameter.

      The writeToDB operation in step 3, may be disregarded and the changes to entity A's properties in step 2 will be lost.

      There is no guarantee that the changes will be lost so this cannot be used as a rollback facility. If the system is shutdown soon after the entity is destroyed (with writeToDB = False), then the changes to the entity may be retained.

      The correct behaviour should be to retain all the changes that were supposedly written to the database using the Base.writeToDB method. BigWorld will conform to this behaviour in a future release. In the meantime, passing False in the writeToDB parameter to the Base.destroy method should be avoided due to its unpredictable behaviour.

    • When using secondary databases on a Debian Linux distribution, the transfer_db script may silently fail due to a requirement of the python libxml2 module. When using secondary databases on Debian Linux please ensure to apt-get install python-libxml2 on all BaseApp machines.

    Bug 20612

  • This is associated with the Changed Feature regarding Identifier properties.

    In 1.9.1, we do not catch instances of setting identifier properties that exist on the cell entity (e.g. ALL_CLIENTS properties), as we do for identifier properties on the base entity. In addition, modifications to a cell entity identifier property in the Base.cellData base property (which exists if the cell entity has not been created) are also not checked.

    If an entity has been previously saved to the database successfully, and the identifier property on the cell entity (or the identifier property's entry in the cellData dictionary) subsequently changes, the next attempt to save to the database could fail due to the uniqueness constraint on that identifier property being broken in the event that another entity is keyed to the new value of the identifier property being set.

    Bug 19719

  • The file specified by resources.xml/system/terrain2 (by default, system/data/terrain2.xml ) is loaded each time that terrain is loaded. This can cause disk access in the main thread.

    To avoid this, load and store a reference to this file's data section in your cell's personality script. See fantasydemo/res/scripts/cell/FantasyDemo.py for an example.

  • The file specified by resources.xml/environment/materialKinds (by default, system/data/material_kinds.xml) is loaded the first time a collision test occurs that involves terrain. This can cause disk access in the main thread.

    To avoid this, load and store a reference to this file's data section in your cell's personality script. See fantasydemo/res/scripts/cell/FantasyDemo.py for an example.

  • The UserDataObjectRef module is loaded the first time that it is needed. This can cause disk access in the main thread.

    To avoid this, import this module into your personality scripts. See fantasydemo/res/scripts/cell/FantasyDemo.py and fantasydemo/res/scripts/base/FantasyDemo.py for examples.

  • FIXED_DICT properties that have an <implementedBy> can cause a module to be imported the first time that the type is created. This can cause disk access in the main thread.

    To avoid this, import the necessary modules in the script file of the relevant entities or the personality scripts.

  • MySQL stored procedures are not supported when used with the BigWorld.executeRawDatabaseCommand method.

    For details on this method, see the document Server Programming Guide's section The Database Layer -> Execute Arbitrary Commands On Database.

  • Due to the Watcher protocol changing as of 1.9.0, the server tools (WebConsole, StatLogger, ControlCluster, ...) are not backwards compatible. If your operational environment is still running 1.8.x servers it is recommended to maintain the existing server tools as forward compatibility has been maintained.

  • The 64-bit version of the server uses up to 50% more memory than the 32-bit version in some cases.

    Bug 24442

BigWorld Technology 1.9.4.5 Server Release Notes


No changes were done for this version.

BigWorld Technology 1.9.4.4 Server Release Notes


No changes were done for this version.

BigWorld Technology 1.9.4.3 Server Release Notes


No changes were done for this version.

BigWorld Technology 1.9.4.2 Server Release Notes


1. Changed Features

  • A fault tolerance issue existed where entity attributes would not exist on the restored BaseApp when Proxy.onClientDeath was called.

    This issue has now been fixed, however users will notice that Base.onRestore is now called prior to onClientDeath.

    Bug 27021

2. Bug Fixes

  • Fixed an issue that would cause client/server property changes to be propagated incorrectly when an entity has more than 60 top-level client/server properties.

    Bug 27059 / Ticket 1504

  • An issue was fixed where the Reviver process would crash after having revived a process due to uncancelled timers.

    Bug 27028

  • Fixed an issue with BaseApp and CellApp reconnecting to a new DBMgr process, for example after reviving a dead DBMgr process.

    Bug 27040

BigWorld Technology 1.9.4.1 Server Release Notes


1. Bug Fixes

  • Fixed a threading issue affecting the reference counting of Model objects on the server. This could cause a CellApp crash while loading models.

    Bug 26805

  • Fixed an issue with processing script from WebConsole's Python Console. Line feed characters were not being processed correctly.

    Bug 26930

  • Removed log NOTICE message from CellApp's Entity::updateInternalsForNewPosition regarding setting the position of a non-volatile entity. This has been replaced by two more accurate messages. These warn when adding a movement controller to an entity whose position is not volatile and when the client-controlled entity does not have a volatile position.

    Bug 26921

  • Fixed a crash that could occur on the CellApp while destreaming a property for an entity during creation or restoration.

    The problem occurs if the property is a class-customised USER or FIXED_DICT data type. If this property's createFromStream() conversion method accesses the entity owning the property, any attempt to access one of that entity's properties before they are destreamed would result in a segmentation fault.

    The new behaviour is to make it seem as though none of the defined properties exist, so an AttributeError will be raised instead.

    Bug 26975 / Ticket #1452

BigWorld Technology 1.9.4 Server Release Notes


1. Overview

  • BigWorld Technology 1.9.4 is the latest version of the BigWorld Technology engine. This version contains multiple bug fixes which do not require complicated merges. Future 1.9 releases are expected to mainly contain bug fixes.

2. Executive Summary

  • Multiple bug fixes and some network performance optimisations were done in this version.

3. New Features

  • No new features

4. Changed Features

4.1. DBMgr

  • A new feature was introduced in BigWorld 1.9.2.3 providing a new Entity property data type UNICODE_STRING. To enable the usage of this property type initially required the conditional compilation in DBMgr. This feature has now been modified to always be enabled. In enabling this feature and reviewing the associated database behaviour it was deemed necessary to alter the initial behaviour that was provided. These changes are enumerated below:

    • Existing persistent entity STRING properties will have their associated database column types changes from TEXT / VARCHAR to BLOB / VARBINARY.

      This change effectively means that the STRING data type as understood by the database is simply a byte sequence. We do not anticipate any behavioural changes in BigWorld as a result of this modification. If non-latin1 data has been stored into a STRING property however you may notice that querying this data in a MySQL client may display different results.

    • Existing entity tables (by default identified with the prefix 'tbl_') will have their default character set modified to be UTF-8.

      As all existing STRING fields will have been modified to BLOB / VARBINARY, this change should only affect newly created fields with of type TEXT / VARCHAR which is be used by the UNICODE_STRING data type.

    • The default character set of the database has been modified to UTF-8.

      This modification will automatically propagate the character set to newly created entity tables as required.

    • The bigworldLogOnMapping table has had its logOnName, password and recordName fields modified to VARBINARY to be consistent with the entity properties they replicate.

    • The client connection from DBMgr to the MySQL database will now always use a character set of UTF-8.

4.2. Mercury / Network

  • The network traffic generated by changing the size of an ARRAY property has been greatly reduced. Only the new values and the slice being changed are streamed.

    This change required modifying the client-server communication protocol.

    Bug 15846

4.3. BaseApp

  • The deprecated old-style BaseApp backup system has been removed in this release. The old backup system made use of dedicated backup BaseApps, and has been disabled in recent releases. The two bw.xml options associated with the old-style BaseApp backup system have also been removed:

    • baseAppMgr/onlyUseBackupOnSameMachine

    • baseAppMgr/useNewStyleBackup

    Bug 26657

5. Bug Fixes

  • Fixed a bug that allowed the BaseApp script method BigWorld.delTimer to cancel timers that were not added via BigWorld.addTimer. This could later cause memory corruption when the true owner of the timer attempted to cancel it.

    Bug 26425

  • It was possible for Base entity timers to be restored with a different script id. If game script had stored the original return value of Base.addTimer, it was possible that the entity would no longer work after restoration. This has now been fixed.

    Bug 26425

  • The CellApp method Entity.cancel now generates a Python exception if called on a ghost entity. Previously, an assertion was hit.

    Bug 26547

  • Previously, calling entity.position.y += 1 on a ghost entity would cause an assertion. A Python exception is now raised instead.

    Bug 26489

  • Specifying non-ascii message filters in LogViewer should now work correctly. Any valid UTF-8 string should work. To query BigWorld server logs that have character set encoding other than UTF-8 will require a modification in bigworld/tools/server/web_console/common/encoding.py.

    Bug 26609

  • Removed the colon characters from secondary database filenames so that they will work on Windows mounts.

    Bug 26659

  • Fixed a problem that could cause script methods called by the client to be delivered to the wrong server entity. This could occur if a message arrived from the old client just after a call to Proxy.giveClientTo().

    Bug 26662

  • Fixed a bug that prevented Unicode characters from being used in WebConsole's Python Console.

    Bug 26444

  • Fixed a bug that would cause a cell entity to get into a bad state if it was offloaded more than 65535 times.

    Bug 26829

  • Fixed a bug that could cause extra property updates to be sent to the client when a player changes CellApps. This fix reduces the bandwidth to the client and prevents unexpected calls to set_ methods.

    Bug 26854

  • Fixed a bug that caused the BaseViaCell mailbox's .cell attribute to not exist if the mailbox's entity type had no base script, rather than no cell script. Also fixed the BaseViaCell cell mailbox accessor to be wrongly mapped to .base on the CellApp.

    Bug N/A

6. Known Bugs & Limitations

  • Python hashlib does not function correctly in Bots process or BaseApp due to an incompatibility between versions of OpenSSL.

    Bug 21059

  • Secondary Databases

    • When secondary databases are enabled and the final writeToDB operation is disabled by passing False in the writeToDB parameter of the Base.destroy function, all writeToDB operations on the entity since the entity was loaded from the database may be disregarded. For example:

      1. Entity A is loaded from the database

      2. Entity A's properties are changed.

      3. Entity A is written to the database by calling the Base.writeToDB method.

      4. Entity A is destroyed by calling the Base.destroy method but False is passed in the writeToDB parameter.

      The writeToDB operation in step 3, may be disregarded and the changes to entity A's properties in step 2 will be lost.

      There is no guarantee that the changes will be lost so this cannot be used as a rollback facility. If the system is shutdown soon after the entity is destroyed (with writeToDB = False), then the changes to the entity may be retained.

      The correct behaviour should be to retain all the changes that were supposedly written to the database using the Base.writeToDB method. BigWorld will conform to this behaviour in a future release. In the meantime, passing False in the writeToDB parameter to the Base.destroy method should be avoided due to its unpredictable behaviour.

    • When using secondary databases on a Debian Linux distribution, the transfer_db script may silently fail due to a requirement of the python libxml2 module. When using secondary databases on Debian Linux please ensure to apt-get install python-libxml2 on all BaseApp machines.

    Bug 20612

  • This is associated with the Changed Feature regarding Identifier properties.

    In 1.9.1, we do not catch instances of setting identifier properties that exist on the cell entity (e.g. ALL_CLIENTS properties), as we do for identifier properties on the base entity. In addition, modifications to a cell entity identifier property in the Base.cellData base property (which exists if the cell entity has not been created) are also not checked.

    If an entity has been previously saved to the database successfully, and the identifier property on the cell entity (or the identifier property's entry in the cellData dictionary) subsequently changes, the next attempt to save to the database could fail due to the uniqueness constraint on that identifier property being broken in the event that another entity is keyed to the new value of the identifier property being set.

    Bug 19719

  • The file specified by resources.xml/system/terrain2 (by default, system/data/terrain2.xml ) is loaded each time that terrain is loaded. This can cause disk access in the main thread.

    To avoid this, load and store a reference to this file's data section in your cell's personality script. See fantasydemo/res/scripts/cell/FantasyDemo.py for an example.

  • The file specified by resources.xml/environment/materialKinds (by default, system/data/material_kinds.xml) is loaded the first time a collision test occurs that involves terrain. This can cause disk access in the main thread.

    To avoid this, load and store a reference to this file's data section in your cell's personality script. See fantasydemo/res/scripts/cell/FantasyDemo.py for an example.

  • The UserDataObjectRef module is loaded the first time that it is needed. This can cause disk access in the main thread.

    To avoid this, import this module into your personality scripts. See fantasydemo/res/scripts/cell/FantasyDemo.py and fantasydemo/res/scripts/base/FantasyDemo.py for examples.

  • FIXED_DICT properties that have an <implementedBy> can cause a module to be imported the first time that the type is created. This can cause disk access in the main thread.

    To avoid this, import the necessary modules in the script file of the relevant entities or the personality scripts.

  • MySQL stored procedures are not supported when used with the BigWorld.executeRawDatabaseCommand method.

    For details on this method, see the document Server Programming Guide's section The Database Layer -> Execute Arbitrary Commands On Database.

  • Due to the Watcher protocol changing as of 1.9.0, the server tools (WebConsole, StatLogger, ControlCluster, ...) are not backwards compatible. If your operational environment is still running 1.8.x servers it is recommended to maintain the existing server tools as forward compatibility has been maintained.

  • The 64-bit version of the server uses up to 50% more memory than the 32-bit version in some cases.

    Bug 24442

BigWorld Technology 1.9.3.5 Server Release Notes


1. Bug Fixes

  • Fixed potential memory corruption if an entity was moved via script in its Entity.onDestroy method.

    Bug 26576

  • The CellApp method Entity.cancel now generates a Python exception if called on a ghost entity. Previously, an assertion was hit.

    Bug 26547

  • Fixed a memory leak caused when BigWorld 1.8 tools queries for a watcher value that does not exist.

    Bug 26579

  • Fixed a race condition causing an assertion to fail on BaseApp during startup. This could be triggered if many BaseApps were started on the same machine.

    Bug 26550

  • Fixed a problem that could cause script methods called by the client to be delivered to the wrong server entity. This could occur if a message arrived from the old client just after a call to Proxy.giveClientTo().

    Bug 26662

  • Fixed a bug that would cause a cell entity to get into a bad state if it was offloaded more than 65535 times.

    Bug 26829

  • Fixed a bug that could cause extra property updates to be sent to the client when a player changes CellApps. This fix reduces the bandwidth to the client and prevents unexpected calls to set_ methods.

    Bug 26854

  • Fixed a threading issue affecting the reference counting of Model objects on the server. This could cause a CellApp crash while loading models.

    Bug 26805

  • Fixed a crash that could occur on the CellApp while destreaming a property for an entity during creation or restoration.

    The problem occurs if the property is a class-customised USER or FIXED_DICT data type. If this property's createFromStream() conversion method accesses the entity owning the property, any attempt to access one of that entity's properties before they are destreamed would result in a segmentation fault.

    The new behaviour is to make it seem as though none of the defined properties exist, so an AttributeError will be raised instead.

    Bug 26975 / Ticket #1452

BigWorld Technology 1.9.3.4 Server Release Notes


No changes were done for this version.

BigWorld Technology 1.9.3.3 Server Release Notes


No changes were done for this version.

BigWorld Technology 1.9.3.2 Server Release Notes


1. Changed Features

  • CellAppMgr now allows new cells to be added to retiring CellApp processes. Previously this caused an assertion, however if another CellApp process unexpectedly dies all available resources should be used to help smooth the load spike.

    Ticket #994

2. Bug Fixes

  • Attempting to shutdown CellApp processes using the CellAppMgr watcher cellApps/<address:port>/isShuttingDown would previously fail reporting that the CellApp was already shutting down. Setting this watcher value should now work as expected.

    Ticket #994

BigWorld Technology 1.9.3.1 Server Release Notes


No changes were done for this version.

BigWorld Technology 1.9.3 Server Release Notes


1. Overview

  • BigWorld Technology 1.9.3 is the latest version of the BigWorld Technology engine. This version contains multiple bug fixes and highly important features which do not require complicated merges. Future 1.9 releases are expected to mainly contain bug fixes.

2. Executive Summary

  • It is now possible to filter the AoI entities sent to the client.

  • To assist in production environments, MessageLogger can be limited to logging from a subset of machines.

  • Access to external services is now supported using a BackgroundTask.

  • CentOS 5 Linux x86_64 distribution is now the preferred distribution. The server is now fully compliant with CentOS x86_64.

  • Analysis of watchers values can now be done using a new "Cluster Control" module.

  • Multiple bug fixes were done in this version.

3. New Features

  • Added functionality to support script control of which entities in an entity's Area of Interest are sent to the client. This is useful for security and performance reasons.

    The new methods are:

    • Entity.withholdFromClient( entity, isWithheld )

    • Entity.isWithheldFromClient( entity )

    • Entity.entitiesInAoI( withheld )

    • Entity.isInAoI( entity )

    New callback:

    • Entity.onEnteredAoI( entity )

    Bug 26000

  • The database layer now supports the option of storing ARRAY and TUPLE properties as a BLOB in the MySQL database instead of in separate tables. This can improve the performance of the database.

    For more details, see the document Implementing Common Systems's section Storing ARRAYs and TUPLEs as a BLOB.

    Bug 18285

  • BWMachined now supports a new option --version which enables cluster operators to verify an installed version of BWMachined.

    Bug 21413

  • To assist in production environments, MessageLogger can be limited to logging from a subset of machines.

    For more details, see the Server Operations Guide's section Message Logger Production Scalability

    Bug 17816

  • BaseApp and CellApp scripts can access external services (e.g. billing or shopping systems) without blocking the main thread by using a BackgroundTask module.

    For more details, see the document Server Programming Guide's section External Services.

  • Added a new configuration option cellApp/ghostDistance which allows customising the distance from a cell boundary which will be considered for ghosting entities.

  • Added a new chapter, Implementing Common Systems, to the Server Programming Guide.

  • Non ASCII characters will now be correctly displayed in LogViewer. By default a UTF8 encoding is used, however this can be easily modified by editing the ENCODING constant in bigworld/tools/server/web_console/log_viewer/controllers.py.

4. Changed Features

4.1. 64 bit

  • BigWorld now supports Linux CentOS 5.3 x86_64 distribution. Customers are encouraged to choose this distribution as their target distribution. It is expected that this distribution will become the primary BigWorld distribution for BigWorld 2.0.

4.2. DBMgr

  • The database table to entity definition synchronisation functionality has been removed from DBMgr into a separate tool sync_db.

    For more details, see the document Server Operations Guide section MySQL Support.

  • The data consolidation tool is now multi-threaded and has better performance. The <dbMgr>/<numConnections> configuration setting determines the number of threads that the data consolidation tool spawns.

    Bug 21706

  • SyncDB now performs a single ALTER TABLE SQL command for all column modifications (i.e, add, delete, modify) when migrating between two entity definitions. This drastically increases the performance of SyncDB when migrating an existing database with large entity datasets.

    Bug 26101

4.3. LoginApp

  • The bw.xml settings <loginApp/externalAddress> and <loginApp/localNetMask> have been moved to <networkAddressTranslation/externalAddress> and <networkAddressTranslation/localNetMask> to better reflect their meaning. The old options are still usable but are deprecated and will be removed in a future release.

    Bug 24584

  • LoginApp now supports specifying multiple login ports via loginApp/externalPorts/port entries in the server configuration files. This allows a range of ports to be used as candidates on startup in the case that multiple LoginApps will be started on the same machine.

    The loginApp/port option still works but is now deprecated.

    Bug 26212

4.4. BaseApp

  • BaseApp's baseApp/externalPort configuration option has been replaced by baseApp/externalPorts/port to be consistent with the equivalent option of LoginApp.

    The baseApp/externalPort option still works but is now deprecated.

  • A new option baseApp/shouldShutDownIfPortUsed has been added.

    Bug 26212

4.5. CellAppMgr

  • Added better load distribution protection for situations where large numbers of spaces are created in a small period of time. Previously a large number of spaces could be created on a single CellApp due to the frequency of CellApps notifying the CellAppMgr of their current load. Space creation should now be more evenly distributed across CellApps in this situation.

    Ticket 637

4.6. Entities

  • Client only entities now allow instantiation for properties of type OWN_CLIENT, and any other data property types that use DATA_OWN_CLIENT. A Client side NOTICE_MSG will be generated for these types of property types.

    Bug 21570, 24773

4.7. Mercury / Network

  • The server no longer sends login replies to the client as once-off reliable messages, relying instead on the client's application-level retry mechanism to resend the login requests. This reduces the effect of DoS attacks. The login version has been bumped for this reason.

    Bug 25043

4.8. Server Tools

  • In order to accommodate 64 bit binaries, compiled server tools have been moved into a new location, bigworld/tools/server/bin/. If upgrading from a previous release, please follow our upgrade recommendations in the Server Tools Installation Guide.

    Bug 23318

  • In order to accommodate 64 bit distributions such as CentOS which ship with older versions of Python (i.e, Python 2.4), MessageLogger and the Python interface to the logs BWLog.so have been more logically separated. This has involved a major code change in bigworld/src/server/tools/message_logger/. This change should not have changed functionality at all, however as a result of this refactor a lot of methods and classes and have been renamed to assist code readability. Also as a result of this change, MessageLogger no longer supports writing of text logs using the -t/--text options.

    Bug 24727

  • Watcher functionality in WebConsole has been moved to a new "Watchers" module underneath the "Cluster Control" module. As part of this separation a new filtered watchers feature has been added which enables wildcard viewing of watcher values across server processes. A set of pre-configured filtered watchers that may be useful has been provided.

    Bug 25542

4.9. Web Integration Module

  • The Web Integration module for Python and PHP have had their functions BigWorld.setNubPort() (Python) and bw_set_nub_port() (PHP) deprecated. These functions have been renamed to BigWorld.resetNetworkInterface() and bw_reset_network_interface() respectively.

    Bug 24803

  • When building the Web Integration modules and supporting libraries in Hybrid[ 64 ]_SingleThreaded mode, the Python re-distribution is no longer built with the BigWorld modifications that enable file access from only within a BigWorld resource path.

    Bug 14312

4.10. Miscellaneous

  • By default, BigWorld now gets its timestamp from the clock_gettime syscall and not the time stamp counter register (rdtsc). To return to the previous behaviour, refer to the section on TimingMethod in Server Tools Installation Guide.

    Bug: N/A

  • bigworld/tools/server/install/setup_win_dev.py now mounts windows shares without group and world writable permissions. This is to allow more reliable compilation of openssl.

    Bug: 25087

5. Bug Fixes

  • Converting from a Python integer to a C++ integer is now strictly checked that it's in a valid range. For example, assigning a value larger than 127 to a uint8 function argument was previously allowed but the value would be truncated to fit. This is no longer allowed.

    Bug 23381

  • Clients are now better able to maintain their connection to the server when they pause for an extended period of time. Previously, it was possible for the client to not process a resent packet (sent via piggyback) but still indicate to the server that it had been received. This meant that this packet would never be processed and the channel would be in a bad state.

    Significant improvements have also been made in situations where there is packet loss or significant, temporary lag. The number of resent packets should now be significantly less.

    Bug 24199

  • mlcat --translate now works when selecting a particular server startup.

    Bug 21715

  • The RDTSC timing method now functions correctly on 64 bit systems.

    Bug: N/A

  • BaseApp and CellApp processes now appropriately shut down when a failed server startup has occured prior to the processes having registering with BWMachined.

    Bug: 25031

  • Added protection against a rare case where a server process that was killed / died was immediately replaced with another unrelated process (thus consuming the server process' PID). BWMachined now detects this case has occured and drops the defunct server process from its list of active server processes.

    Ticket: 544

  • Fixed a bug in WebConsole/LogViewer that was causing the search range to be offset by the difference between the daylight-savings timezone offset and the non-daylight-savings timezone offset. The log search input time would always be treated as a time in daylight-savings regardless of whether daylight savings on the server was actually in effect.

    Bug: N/A

  • Fixed a bug that could cause CellApp processes to fail to start up if there is a poorly configured bwmachined process on the network. The CellApp process would report that it could not find the CellAppMgr even though one was present.

    Bug: 26094

  • Reduced the amount of log data generated when packets come in on the BaseApp's external interface that cannot be processed. This includes packets coming from clients that have been disconnected for a while. These packets are encrypted and they cannot be decrypted once the channel has gone.

    Bug: 25998

  • Reduced the amount of log data generated by BaseApp when clients are experiencing packet loss.

    Ticket: 644

  • Improved the argument checking to Entity.entitiesInRange(). Previously if an invalid entity type string was passed in, all entity types were matched. A Python ValueError is now raised.

    Ticket: 647

  • Fixed a bug in the BigWorld Python import hook mechanism. Previously, reloading modules using the Python built-in reload() function would use a cached copy of the source file read when first imported, instead of re-reading the potentially modified file from the disk.

    Bugs: 26152, 26104; Ticket: 602

  • Fixed a possible CellApp crash if createGhost messages from different CellApps for the same entity are received in the wrong order.

    Bug: 26203

  • The first input to a client entity's movement filter was incorrect for entities on a vehicle. It was passed in global coordinates instead of local coordinates. This could show up as passenger entities moving quickly towards their vehicle.

    Bug: 26410

  • Fixed an issue with DBMgr not reconnecting to the MySQL server, or any of the configured backup database servers, if the connection to the current MySQL server is lost.

    Bug: 26437; Ticket: 829

6. Known Bugs & Limitations

  • Python hashlib does not function correctly in Bots process or BaseApp due to an incompatibility between versions of openssl.

    Bug 21059

  • Secondary Databases

    • When secondary databases are enabled and the final writeToDB operation is disabled by passing False in the writeToDB parameter of the Base.destroy function, all writeToDB operations on the entity since the entity was loaded from the database may be disregarded. For example:

      1. Entity A is loaded from the database

      2. Entity A's properties are changed.

      3. Entity A is written to the database by calling the Base.writeToDB method.

      4. Entity A is destroyed by calling the Base.destroy method but False is passed in the writeToDB parameter.

      The writeToDB operation in step 3, may be disregarded and the changes to entity A's properties in step 2 will be lost.

      There is no guarantee that the changes will be lost so this cannot be used as a rollback facility. If the system is shutdown soon after the entity is destroyed (with writeToDB = False), then the changes to the entity may be retained.

      The correct behaviour should be to retain all the changes that were supposedly written to the database using the Base.writeToDB method. BigWorld will conform to this behaviour in a future release. In the meantime, passing False in the writeToDB parameter to the Base.destroy method should be avoided due to its unpredictable behaviour.

    Bug 20612

  • This is associated with the Changed Feature regarding Identifier properties.

    In 1.9.1, we do not catch instances of setting identifier properties that exist on the cell entity (e.g. ALL_CLIENTS properties), as we do for identifier properties on the base entity. In addition, modifications to a cell entity identifier property in the Base.cellData base property (which exists if the cell entity has not been created) are also not checked.

    If an entity has been previously saved to the database successfully, and the identifier property on the cell entity (or the identifier property's entry in the cellData dictionary) subsequently changes, the next attempt to save to the database could fail due to the uniqueness constraint on that identifier property being broken in the event that another entity is keyed to the new value of the identifier property being set.

    Bug 19719

  • The file specified by resources.xml/system/terrain2 (by default, system/data/terrain2.xml ) is loaded each time that terrain is loaded. This can cause disk access in the main thread.

    To avoid this, load and store a reference to this file's data section in your cell's personality script. See fantasydemo/res/scripts/cell/FantasyDemo.py for an example.

  • The file specified by resources.xml/environment/materialKinds (by default, system/data/material_kinds.xml ) is loaded the first time a collision test occurs that involves terrain. This can cause disk access in the main thread.

    To avoid this, load and store a reference to this file's data section in your cell's personality script. See fantasydemo/res/scripts/cell/FantasyDemo.py for an example.

  • The UserDataObjectRef module is loaded the first time that it is needed. This can cause disk access in the main thread.

    To avoid this, import this module into your personality scripts. See fantasydemo/res/scripts/cell/FantasyDemo.py and fantasydemo/res/scripts/base/FantasyDemo.py for examples.

  • FIXED_DICT properties that have an <implementedBy> can cause a module to be imported the first time that the type is created. This can cause disk access in the main thread.

    To avoid this, import the necessary modules in the script file of the relevant entities or the personality scritps.

  • MySQL stored procedures are not supported when used with the BigWorld.executeRawDatabaseCommand method.

    For details on this method, see the document Server Programming Guide 's section The Database Layer -> Execute Arbitrary Commands On Database .

  • Due to the Watcher protocol changing as of 1.9.0, the server tools (WebConsole, StatLogger, ControlCluster, ...) are not backwards compatible. If your operational environment is still running 1.8.x servers it is recommended to maintain the existing server tools as forward compatibility has been maintained.

  • The 64-bit version of the server uses up to 50% more memory than the 32-bit version in some cases.

    Bug 24442

BigWorld Technology 1.9.2.6 Server Release Notes


1. Bug Fixes

  • Fixed an issue with Channels that were registered for a delayed send, and reset to Address::NONE before the delayed send occurred, causing an assertion failure. Now these channels are sent on just before they are reset to a new address.

    Bug 26845

  • Fixed a bug that would cause a cell entity to get into a bad state if it was offloaded more than 65535 times.

    Bug 26829

  • Fixed a threading issue affecting the reference counting of Model objects on the server. This could cause a CellApp crash while loading models.

    Bug 26805

  • Fixed an issue with Channels that were registered for a delayed send, and reset to Address::NONE before the send occurred, causing the assertion addr_ != Address::NONE to fail on Nub::send().

    Bug 26845 / Ticket #1340

  • Fixed a crash that could occur on the CellApp while destreaming a property for an entity during creation or restoration.

    The problem occurs if the property is a class-customised USER or FIXED_DICT data type. If this property's createFromStream() conversion method accesses the entity owning the property, any attempt to access one of that entity's properties before they are destreamed would result in a segmentation fault.

    The new behaviour is to make it seem as though none of the defined properties exist, so an AttributeError will be raised instead.

    Bug 26975 / Ticket #1452

BigWorld Technology 1.9.2.5 Server Release Notes


1. Bug Fixes

  • Fixed an issue with Channels that were registered for a delayed send, and reset to Address::NONE before the delayed send occurred, causing an assertion failure. Now these channels are sent on just before they are reset to a new address.

    Bug 26845

  • Fixed a bug that would cause a cell entity to get into a bad state if it was offloaded more than 65535 times.

    Bug 26829

  • Fixed a threading issue affecting the reference counting of Model objects on the server. This could cause a CellApp crash while loading models.

    Bug 26805

  • Fixed an issue with Channels that were registered for a delayed send, and reset to Address::NONE before the send occurred, causing the assertion addr_ != Address::NONE to fail on Nub::send().

    Bug 26845 / Ticket #1340

BigWorld Technology 1.9.2.4 Server Release Notes


1. Bug Fixes

  • Fixed potential memory corruption if an entity was moved via script in its Entity.onDestroy method.

    Bug 26576

  • CellAppMgr now allows new cells to be added to retiring CellApp processes. Previously this caused an assertion, however if another CellApp process unexpectedly dies all available resources should be used to help smooth the load spike.

    Ticket #994

  • Attempting to shut down CellApp processes using the CellAppMgr watcher cellApps/<address:port>/isShuttingDown would previously fail reporting that the CellApp was already shutting down. Setting this watcher value should now work as expected.

    Ticket #994

  • The CellApp method Entity.cancel now generates a Python exception if called on a ghost entity. Previously, an assertion was hit.

    Bug 26547

  • Fixed startup crash if a corrupted .pyc was loaded.

    Ticket #1029

BigWorld Technology 1.9.2.3 Server Release Notes


1. Bug Fixes

  • Fixed a possible CellApp crash if createGhost messages from different CellApps for the same entity are received in the wrong order.

    Bug: 26203

BigWorld Technology 1.9.2.2 Server Release Notes


1. New Features

  • Added a new UNICODE_STRING Entity property type.

    By default this property type is not able to be used as a <Persistent> property. In order to persist this property type, DBMgr needs to be rebuilt enabling both the USE_MYSQL and USE_MYSQL_UTF8 flags in bigworld/src/server/dbmgr/Makefile.

    ...
    USE_MYSQL=1
    USE_MYSQL_UTF8=1
    USE_XML=0

    Once rebuilt with UTF8 enabled, DBMgr will perform an "ALTER DATABASE CHARACTER SET 'utf8'" which will create any future tables with a utf8 default encoding, but leave existing tables in the latin1 encoding.

    Ticket #848

2. Bug Fixes

  • Added better load distribution protection for situations where large numbers of spaces are created in a small period of time. Previously a large number of spaces could be created on a single CellApp due to the frequency of CellApps notifying the CellAppMgr of their current load. Space creation should now be more evenly distributed across CellApps in this situation.

    Ticket # 637

  • The first input to a client entity's movement filter was incorrect for entities on a vehicle. It was passed in global coordinates instead of local coordinates. This could show up as passenger entities moving quickly towards their vehicle.

    Bug: 26410

BigWorld Technology 1.9.2.1 Server Release Notes


1. Bug Fixes

  • Fixed a bug where a recently teleported entity's buffered ghost messages can be replayed in the wrong order, causing an assert. Bug 24539

  • Fixed a bug where backups for some base entities will be missing shortly after a BaseApp is added to the cluster. Bug 25525

  • Fixed a bug where the onInit callback on BaseApp was not being triggered. Perldesk #311

  • Fixed a bug where a cellapp would crash if an entity is told to follow a destroyed entity. Perldesk #318

  • Fixed a bug that results in error messages stating that a proxy was not set for call, which indicates that messages from the cell to the client entity are wrongly dropped at the BaseApp. This could cause entity updates to not be realised on the client, for example, whether an entity had left or entered the player's AoI. This could happen if there was some loss and/or latency on the server network resulting in more than one bundle being processed at a time, which would clear the proxy for call prematurely after the first bundle.

    Bug 25391

BigWorld Technology 1.9.2 Server Release Notes


1. Overview

  • BigWorld Technology 1.9.2 is the latest version of the BigWorld Technology engine. This version contains the fixes required for releasing the BigWorld evaluation version and urgent fixes required by customers using 1.9.1.

2. Executive Summary

  • The server can now be compiled and run natively on 64 bit machines. This currently does not include the server tools.

3. Bug Fixes

  • Fixed a bug where FLOAT64 properties stored in the XML database were truncated to 6 decimal places.

    Bug 9106

  • When using the LogViewer functionality of WebConsole on a machine located in a different timezone to the client browser, timezone differences were not being taken into account which caused strange search results. This issue has now been resolved.

    Bug 13525

  • Fixed two issues with the navigation, firstly, Entity.navigateFollow() calls navigateStep() internally, and due to the prototype for navigateStep() changing in 1.9.1, the calling code in navigateFollow() was not updated to the new prototype. As a result, the arguments were mismatched.

    Secondly, Entity.navigate() has been fixed so that the navigating entity has its height lifted to be at least the containing navpoly's maximum height, in line with how Entity.navigateStep() behaves.

    Bug 24241, Ticket # 83

  • User Data Objects will now get their __del__ method called when they get deleted.

    Bug 24153, Ticket # 85

  • Fixed a regression that allowed an external channel to assert when channels are set to assert on overflow. Put back the diagnostic info on overflow assert.

    Bug 24552

  • Fixed a bug whereby mailbox properties on entities are unavailable to scripts on the bots process.

    Bug 24109

  • Fixed a bug that would cause the DBMgr to hit a CRITICAL_MSG if it was using the XML database and a BaseApp was killed.

    Bug 24777

  • Fixed a bug in logging code that causes a crash when offloading ghosts along an overloaded channel.

    Bug 25024

  • Fixed three race conditions that could occur when chunks are loaded and unloaded quickly and would cause segfaults.

    Bug 24964

  • The control cluster script now correctly prints out an error message when mercuryprofile is used without specifying a process.

    Bug 25135

  • onDelBaseAppData will now correctly be called when removing data from the BigWorld.baseAppData dictionary.

    Ticket ID: 210

  • Fixed an issue with piggybacked packets where those piggybacked packets that are discarded due to being above the receive window may not have been resent if an ACK was sent for its containing packet. Now containing packets are not acknowledged if any of its piggybacked packets are discarded for being above the receive window.

    Bug 24553, Ticket # 114

4. Known Bugs & Limitations

  • As 1.9.2 introduces support for 64 bit server binaries but not full support for the 64 bit server tools, bwmachined needs to be handled differently than to prior releases.

    When building a 64 bit version of bwmachined, the binary will be placed into bigworld/src/server/tools/bwmachined/Hybrid64/bwmachined as opposed to its regular location bigworld/tools/server/install/bwmachined. This will impact the bwmachined.sh install procedure unless you explicity copy the 64 bit version into the standard location. This can be done with the following command.

    $ cd bigworld/src/server/tools/bwmachined
    $ cp Hybrid64/bwmachined ../../../../tools/server/install

    If you intend to run 64 bit servers you will need to install a 64 bit version of bwmachined onto the respective machines as there are known issues with 32 bit server binaries not working correctly due to glibc differences.

    This issue will be completely resolved in 1.9.3.

  • Due to adding support to the *_MSG message macros for the %z format string modifier, log messages generated from 1.9.1 client / server processes using %z will be incorrectly saved by 1.9.0 or earlier instances of MessageLogger.

    The recommended solution for this issue is to remove the old log directory when installing the 1.9.1 server tools and allow a completely fresh set of logs to be written.

    For example:

    $ rm -rf /var/log/bigworld/message_logger
  • Fedora 9

    • Python hashlib does not function correctly in Bots process or BaseApp due to an incompatibility between versions of openssl.

      Bug 21059

  • Secondary Databases

    • When secondary databases are enabled and the final writeToDB operation is disabled by passing False in the writeToDB parameter of the Base.destroy function, all writeToDB operations on the entity since the entity was loaded from the database may be disregarded. For example:

      1. Entity A is loaded from the database

      2. Entity A's properties are changed.

      3. Entity A is written to the database by calling the Base.writeToDB method.

      4. Entity A is destroyed by calling the Base.destroy method but False is passed in the writeToDB parameter.

      The writeToDB operation in step 3, may be disregarded and the changes to entity A's properties in step 2 will be lost.

      There is no guarantee that the changes will be lost so this cannot be used as a rollback facility. If the system is shutdown soon after the entity is destroyed (with writeToDB = False), then the changes to the entity may be retained.

      The correct behaviour should be to retain all the changes that were supposedly written to the database using the Base.writeToDB method. BigWorld will conform to this behaviour in a future release. In the meantime, passing False in the writeToDB parameter to the Base.destroy method should be avoided due to its unpredictable behaviour.

    Bug 20612

  • This is associated with the Changed Feature regarding Identifier properties.

    In 1.9.1, we do not catch instances of setting identifier properties that exist on the cell entity (e.g. ALL_CLIENTS properties), as we do for identifier properties on the base entity. In addition, modifications to a cell entity identifier property in the Base.cellData base property (which exists if the cell entity has not been created) are also not checked.

    If an entity has been previously saved to the database successfully, and the identifier property on the cell entity (or the identifier property's entry in the cellData dictionary) subsequently changes, the next attempt to save to the database could fail due to the uniqueness constraint on that identifier property being broken in the event that another entity is keyed to the new value of the identifier property being set.

    Bug 19719

  • The file specified by resources.xml/system/terrain2 (by default, system/data/terrain2.xml ) is loaded each time that terrain is loaded. This can cause disk access in the main thread.

    To avoid this, load and store a reference to this file's data section in your cell's personality script. See fantasydemo/res/scripts/cell/FantasyDemo.py for an example.

  • The file specified by resources.xml/environment/materialKinds (by default, system/data/material_kinds.xml ) is loaded the first time a collision test occurs that involves terrain. This can cause disk access in the main thread.

    To avoid this, load and store a reference to this file's data section in your cell's personality script. See fantasydemo/res/scripts/cell/FantasyDemo.py for an example.

  • The UserDataObjectRef module is loaded the first time that it is needed. This can cause disk access in the main thread.

    To avoid this, import this module into your personality scripts. See fantasydemo/res/scripts/cell/FantasyDemo.py and fantasydemo/res/scripts/base/FantasyDemo.py for examples.

  • FIXED_DICT properties that have an <implementedBy> can cause a module to be imported the first time that the type is created. This can cause disk access in the main thread.

    To avoid this, import the necessary modules in the script file of the relevant entities or the personality scritps.

  • Currently, MySQL stored procedures are not supported when used with the BigWorld.executeRawDatabaseCommand method.

    For details on this method, see the document Server Programming Guide 's section The Database Layer -> Execute Arbitrary Commands On Database .

  • Due to the Watcher protocol changing as of 1.9.0, the server tools (WebConsole, StatLogger, ControlCluster, ...) are not backwards compatible. If your operational environment is still running 1.8.x servers it is recommended to maintain the existing server tools as forward compatibility has been maintained.

  • Customers using Debian Etch will experience issues with WebConsole and StatLogger failing overnight due to a MySQL reconnection issue. The cause of this issue is due to MySQL timing out inactive connections after 8 hours. Currently the default package versions of MySQL-python and SQLObject provided by Debian Etch do not include a known fix for this issue. The suggested work around for this problem is to restart WebConsole every morning prior to the majority of developers starting work. This can be achieved by added a cron job to the root user of the machine running WebConsole as follows:

    # 06:30 Mon-Fri: Restart WebConsole to avoid MySQL reconnection issues
    30 6 * * 1-5 /etc/init.d/bw_web_console restart       
  • The new function findRandomNeighbourPoint() is a work in progress, and may return points such that, when the points are passed to canNavigateTo(), the resulting nearest navigable point may be some distance away.

  • The packaged version of the ConsolidateDBs binary executable (located in bigworld/bin/Hybrid/commands/consolidate_dbs) cannot be run on Fedora 9 due to a difference in the version of the OpenSSL library that it was dynamically linked against when compiled under Fedora 8. In order for it to work with Fedora 9, a re-compile is required: from the top-level BigWorld directory, run:

    $ make -C bigworld/src/server/tools/consolidate_dbs clean all
  • The 64-bit version of the server uses up to 50% more memory than the 32-bit version in some cases.

    Bug 24442

BigWorld Technology 1.9.1.3 Server Release Notes


1. Bug Fixes

  • Fixed a bug that could cause players to not see some other players or entities. This can happen if entities teleport very quickly in and out of a space in a very small duration of time, causing witnessing players to not be able to receive updates for those teleported entities.

    Bug 22779

  • Fixed a bug where changing an entity's controlledBy property to None then back again may cause all future updates from the client to be ignored. [Ticket ID: 120]

    Bug 24736

  • Fixed a bug whereby mailbox properties on entities are unavailable to scripts on the bots process.

    Bug 24109

BigWorld Technology 1.9.1.2 Server Release Notes


1. Bug Fixes

  • Included src/lib/makefile in the package to enable server compilation. bug: 24168 [Ticket ID: 88] [Ticket ID: 93]

BigWorld Technology 1.9.1.1 Server Release Notes


1. Bug Fixes

  • Included bigworld/src/server/common/test_mysql.sh in the package. bigworld/src/server/tools/consolidate_dbs can now be compiled.

    bug: 23832

BigWorld Technology 1.9.1 Server Release Notes


1. Overview

  • BigWorld Technology 1.9.1 is the latest version of the BigWorld Technology engine. This version should allow customers to develop and release their games and is considered a feature complete, fully tested version for the BigWorld 1.9 series.

2. Executive Summary

  • The load on the DBMgr and primary MySQL database can now be significantly reduced. This is done via the use of intermediate, SQLite databases that are local to BaseApps to store entity archive data.

    For further information please review the Server Programming Guide.

  • A new Release Planning document has been introduced. This document details the steps required to successfully release a game using the BigWorld Technology engine. It is recommended to review this document during the game development stages to ensure a successful game release.

  • The server has been ported to the x86-64 platform allowing server components to access much more memory and advanced performance and security features of all recent Intel and AMD processors.

    In this release we do not recommend or support full scale commercial deployment using this platform, but do encourage and support development, testing and trial deployments. We anticipate it to be sufficiently tested by 1.9.2.

3. New Features

  • Secondary databases can be enabled to provide better scalability for large systems where the MySQL database is the bottleneck.

    For details, see the document Server Programming Guide's section The Database Layer -> Secondary Databases.

  • Servers will log a stack trace when hitting a critical assertion for easier bug reports.

    bug 21460

  • Added support for user-dependent bw.xml file to allow easier support for multiple users running from the same resource tree.

    If a file with the name bw_<username>.xml exists, this is now used as the start of the server configuration chain instead of bw.xml.

    bug 19960

  • A new profiling command, called mercuryprofile, has been added to the ControlCluster command line tool for profiling Mercury interface statistics. For each process specified, a report is generated with statistics based on the number and size of messages received by that process.

    Bug 18153

  • Added LoginApp login rate statistics to StatGrapher:

    • Total Logins Per Second

    • Rate-limited Logins Per Second

    • Successful Logins Per Second

    • Failed Logins Per Second

    These statistics are 5-second exponentially weighted averages, sampled each second.

    Bug 20978

  • New server configuration options have been added to limit how many overflowed packets are allowed per channel type.

    <maxChannelOverflow>
    	<external> 1024 </external>
    	<internal> 8192 </internal>
    	<indexed>  4096 </indexed>
    	<isAssert> false </isAssert>
    </maxChannelOverflow>
    

    Bug 21536

  • Added a new timer option called gettime which uses the high-resolution monotonic timer in the Linux kernel for better stability in environments where NTP is used.

    Bug 22116

  • Added a new configuration setting in /etc/bwmachined.conf called InternalInterface. This option disables auto-discovery of the internal network interface by allowing the internal network interface to be specified. For more details, refer to the Server Installation Guide /etc/bwmachined.conf and InternalInterface.

    Bug 21030

  • All server components can now be compiled as native 64 bit binaries to support >4GB of memory per process, longer registers, faster integer maths, NX support etc.

    This feature is not yet officially support. If you are interested in using pre-release, native 64-bit binaries, please contact support@bigworldtech.com.

    Bug 19816

  • Added a mechanism to help detect issues with ghost entities.

    The option cellApp/enforceGhostDecorators has been added to bw.xml. If enabled, a cell entity method that is not in the .def file can only be called on a potential ghost entity if it has the @bwdecorators.callableOnGhost decorator.

    This is disabled by default so that functionality does not change. It is recommended that you enable this and cellApp/treatAllOtherEntitiesAsGhosts during debugging.

    Bug 22995

  • Added a new function named findRandomNeighbourPoint() to find a nearby random point around a given point. The result point is guaranteed to be connectable to the given point. Note: This function is still a work in progress.

    bugs 22494 and 23737

  • Added BigWorld.registerFileDescriptor and related methods to script on BaseApps and CellApps. These allow Python sockets and files to be added to the nub's select loop so that they can be processed in a non-blocking way. A callback will be called when there is something of interest on the file descriptor.

    bug 23264

4. Changed Features

  • The Python navigation interface has been changed. A new, optional parameter maxDistance has been added to a number of methods. This limits the search range to the specified distance to help avoid CellApp CPU spikes.

    Important note: All existing code calling these functions must be reviewed and modified accordingly to reflect the interface change.

    bug 22685

  • Added configuration options <baseApp/shouldResolveMailBoxes> and <cellApp/shouldResolveMailBoxes> to bw.xml. These options are defaulted to false.

    Previously, if a mailbox could be resolved to a local entity, the mailbox was immediately replaced with a reference to that entity. This lead to error-prone code as mailbox arguments were used incorrectly to access entity properties directly. This often occurred during development when running in an environment with a single BaseApp or CellApp.

    bug 14064

  • New default server configuration files have been added. These files replace bigworld/res/server/defaults.xml.

    You should update your parentFile entry in bw.xml to use server/development_defaults.xml during development and server/production_defaults.xml during production.

    A new top level configuration option <production> has also been added which forces server processes to emit an ERROR message when bad production mode settings are encountered.

    Bug 18267

  • Certain warnings and debug messages relating to network reliability have been removed since they created excessive log messages and did not have any diagnostic merit.

  • Supporting better aggregation of messages sent on irregular* channels.

    When making script calls on a BaseMailBox, for example, previously a network packet was created for each call. The sending of these messages have now been delayed slightly so that multiple messages to over the same channel can be aggregated.

    *An irregular channel is a channel that does not have a regular send interval.

  • CellApp's Entity.findCover function has been deprecated, since it relies in the deprecated reannotation information, previously generated by NavGen.

  • A cell mailbox is now available when the cell entity's creation is pending.

  • Primitive BigWorld data types as defined in cstdmf/stdmf.hpp such as int8/uint16/int32/uint32, have been modified to be fixed size types as opposed to 32 bit platform equivalents.

    bug 20972

  • BigWorld message macros (i.e. ERROR_MSG ...) have enabled GCC's static argument checking.

    bug 20261

  • Entities on the servers now expose an attribute "className" for consistency with ServerEntityMailbox.

    bug 21179

  • Changed the behaviour of the callback when an error occurs when script calls any of the functions:

    • BigWorld.createBaseRemotely()

    • BigWorld.createBaseAnywhere()

    • BigWorld.createBaseFromDB()

    • BigWorld.createBaseFromDBID()

    • BigWorld.createBaseAnywhereFromDB()

    • BigWorld.createBaseAnywhereFromDBID()

    Previously in 1.9.0, if there was a problem while resolving the mailbox that was used to pass into the entity parameter of the callbacks registered with these functions, it would pass None for the entity parameter and fail silently. Error log output is now emitted in this case, and an invalid mailbox is passed through.

    Bug 21327

  • Space data is no longer archived by default in BigWorld servers. This feature appeared to not be used by most of our customers and disabling improves DBMgr performance.

    To re-enable this feature use the <cellAppMgr/archivePeriod> option in bw.xml.

    Bug 19608

  • Setting Identifier properties (that is, defined entity properties that have <Identifier> true </Identifier> ) for BASE properties for entities that have already been saved to the database (these entities have non-zero database IDs) will result in a Python ValueError exception being raised.

    This is to prevent the situation where an entity that has been saved to the database with one identifier then changes that identifier to a new string. On this entity's next attempt to save itself to the database, the new value for the identifier property may break the uniqueness constraint on the identifier property if the same value for the identifier property exists for another entity in the database.

    See also the associated entry in Known Issues regarding identifier properties.

    Bug 19719

  • Instances of the baseApp/externalPorts bw.xml option that appear in different baseApp sections (within the same file and across configuration files in the ParentFile chain) are now respected. Previously, only the baseApp section that appeared first had its externalPort elements respected.

    Bug 21606

  • Destroying the default space from Python is no longer allowed.

    bug 18858

  • Allow a corresponding cell entity to be destroyed from the BaseApp as soon as it is requested.

    Bug 22729

  • The third party flashticle package used by the StatGrapher has been replaced by the PyAMF package.

    Bug 21338

  • The virtual function handleTimeout( Mercury::TimerID id, void * arg ) now cannot be overloaded using an int as its id parameter.

    Bug 19816, Caveat of the 64 bit port.

5. Bug Fixes

  • Fixed a potential CellApp crash caused by using a deleted Channel.

    This could occur if a message in a packet on an entity's channel caused that entity to teleport. If there were further buffered packets on this channel, these would be processed after the channel was gone.

  • Fixed DBMgr compilation errors when USE_MYSQL_PREPARED_STATEMENTS=0 in the make file.

  • The file specified by resources.xml/system/terrain2 (by default, system/data/terrain2.xml ) is now loaded at startup, and no longer needs to be loaded and referenced in your cell's personality script to prevent disk access in the main thread

  • The file specified by resources.xml/environment/materialKinds (by default, system/data/material_kinds.xml ) is now loaded at startup, and no longer needs to be loaded and referenced in your cell's personality script to prevent disk access in the main thread

  • Corrected spurious warning message when spaces are destroyed.

  • Improved navigation support when inside shells.

    Bug 19655

  • Fixed an issue where an uncontrolled BaseApp process death could cause corruption of the global bases registry.

    Bug 21352

  • The web integration module sources are now included, so now the server Makefile will not fail because of the missing subdirectory.

    Bug 20564

  • Fixed an issue with Base reference counting. If a Base is created and the Base Python script calls self.destroy() in __init__(), this can cause the Base object to be destructed prematurely which can cause dangling Python references.

    Bug 21464

  • Fixed an issue with the ControlCluster command line tool missing the eventprofile command.

    Bug 17429

  • Fixed an issue with BigWorld module being un-imported on script reload via BigWorld.reloadScript().

    Bug 21588

  • Fixed an issue with the cell counterparts to base entities that have not been successfully restored after a crash sending garbage to the baseapp it thinks it has been restored to.

    Bug 21535

  • Fixed shutting down the server when shutDownServerOnBadState is true. Previously, the server would not shut down cleanly if the last CellApp died.

    Bug 21752

  • The StatGrapher legend has been modified so that only values greater than or equal to one million are displayed in scientific notation. Previously the rollover was 1000.

  • Fixed a bug where an incoming bundle could time out and never be received even though it is on a channel.

    Bug 22179

  • Fixed the library scripts in bigworld/res/entities/common/Lib which were of a previous version to the Python interpreter used in server apps.

    Bug 22199

  • Added BigWorld.getMaterialKinds method to CellApp's Python API. This was previously only available on the client.

    Bug 22479

  • Fixed the library scripts in bigworld/res/entities/common/Lib which were of a previous version to the Python interpreter used in server apps.

    Bug 22199

  • Fixed a bug where two seperate logins from the same client would be mistaken for resending the request after the reply had been dropped.

    Bug 22502

  • Fixed a bug where enabling baseApp/packetLog would cause the BaseApp to immediately segfault when a client connected.

    Bug 22832

  • Fixed a bug where overflow packets are not cleared when the channel is reset.

    Bug 22973

  • User data object circular references are now broken up when chunks containing one or more of these user data objects are unloaded.

    Bug 21674

  • Bots will not needlessly time out when packet loss occurs.

    Bug 23249

  • The displaying of Python backtraces will become asynchronous if reading in the source file would cause the main thread to block.

    Bug 12999

6. Known Bugs & Limitations

  • Due to adding support to the *_MSG message macros for the %z format string modifier, log messages generated from 1.9.1 client / server processes using %z will be incorrectly saved by 1.9.0 or earlier instances of MessageLogger.

    The recommended solution for this issue is to remove the old log directory when installing the 1.9.1 server tools and allow a completely fresh set of logs to be written.

    For example:

    $ rm -rf /var/log/bigworld/message_logger
  • Fedora 9

    • Python hashlib does not function correctly in Bots process or BaseApp due to an incompatibility between versions of openssl.

      Bug 21059

  • Secondary Databases

    • When secondary databases are enabled and the final writeToDB operation is disabled by passing False in the writeToDB parameter of the Base.destroy function, all writeToDB operations on the entity since the entity was loaded from the database may be disregarded. For example:

      1. Entity A is loaded from the database

      2. Entity A's properties are changed.

      3. Entity A is written to the database by calling the Base.writeToDB method.

      4. Entity A is destroyed by calling the Base.destroy method but False is passed in the writeToDB parameter.

      The writeToDB operation in step 3, may be disregarded and the changes to entity A's properties in step 2 will be lost.

      There is no guarantee that the changes will be lost so this cannot be used as a rollback facility. If the system is shutdown soon after the entity is destroyed (with writeToDB = False), then the changes to the entity may be retained.

      The correct behaviour should be to retain all the changes that were supposedly written to the database using the Base.writeToDB method. BigWorld will conform to this behaviour in a future release. In the meantime, passing False in the writeToDB parameter to the Base.destroy method should be avoided due to its unpredictable behaviour.

    Bug 20612

  • This is associated with the Changed Feature regarding Identifier properties.

    In 1.9.1, we do not catch instances of setting identifier properties that exist on the cell entity (e.g. ALL_CLIENTS properties), as we do for identifier properties on the base entity. In addition, modifications to a cell entity identifier property in the Base.cellData base property (which exists if the cell entity has not been created) are also not checked.

    If an entity has been previously saved to the database successfully, and the identifier property on the cell entity (or the identifier property's entry in the cellData dictionary) subsequently changes, the next attempt to save to the database could fail due to the uniqueness constraint on that identifier property being broken in the event that another entity is keyed to the new value of the identifier property being set.

    Bug 19719

  • The file specified by resources.xml/system/terrain2 (by default, system/data/terrain2.xml ) is loaded each time that terrain is loaded. This can cause disk access in the main thread.

    To avoid this, load and store a reference to this file's data section in your cell's personality script. See fantasydemo/res/scripts/cell/FantasyDemo.py for an example.

  • The file specified by resources.xml/environment/materialKinds (by default, system/data/material_kinds.xml ) is loaded the first time a collision test occurs that involves terrain. This can cause disk access in the main thread.

    To avoid this, load and store a reference to this file's data section in your cell's personality script. See fantasydemo/res/scripts/cell/FantasyDemo.py for an example.

  • The UserDataObjectRef module is loaded the first time that it is needed. This can cause disk access in the main thread.

    To avoid this, import this module into your personality scripts. See fantasydemo/res/scripts/cell/FantasyDemo.py and fantasydemo/res/scripts/base/FantasyDemo.py for examples.

  • FIXED_DICT properties that have an <implementedBy> can cause a module to be imported the first time that the type is created. This can cause disk access in the main thread.

    To avoid this, import the necessary modules in the script file of the relevant entities or the personality scritps.

  • Currently, MySQL stored procedures are not supported when used with the BigWorld.executeRawDatabaseCommand method.

    For details on this method, see the document Server Programming Guide 's section The Database Layer -> Execute Arbitrary Commands On Database .

  • Due to the Watcher protocol changing as of 1.9.0, the server tools (WebConsole, StatLogger, ControlCluster, ...) are not backwards compatible. If your operational environment is still running 1.8.x servers it is recommended to maintain the existing server tools as forward compatibility has been maintained.

  • Customers using Debian Etch will experience issues with WebConsole and StatLogger failing overnight due to a MySQL reconnection issue. The cause of this issue is due to MySQL timing out inactive connections after 8 hours. Currently the default package versions of MySQL-python and SQLObject provided by Debian Etch do not include a known fix for this issue. The suggested work around for this problem is to restart WebConsole every morning prior to the majority of developers starting work. This can be achieved by added a cron job to the root user of the machine running WebConsole as follows:

              # 06:30 Mon-Fri: Restart WebConsole to avoid MySQL reconnection issues
    30 6 * * 1-5 /etc/init.d/bw_web_console restart
            
  • The new function findRandomNeighbourPoint() is a work in progress, and may return points such that, when the points are passed to canNavigateTo(), the resulting nearest navigable point may be some distance away.

BigWorld Technology 1.9.0.5 Server Release Notes


1. Bug Fixes

  • Extended the buffer size used when reading /proc/cpuinfo in bwmachined. The short buffer size was causing a crash when the processor flags line exceeded 256 characters (as seen on Opteron machines).

BigWorld Technology 1.9.0.4 Server Release Notes


1. Bug Fixes

  • Fixed a bug where any base entity with the cellData member (i.e. its cell entity has not yet been created or has already been destroyed) cannot be restored if the BaseApp that it is on crashes.

  • Fixed a bug where if the configuration setting <baseApp>/<backUpUndefinedProperties> is set to false, entities cannot be backed up successfully.

    Initially added in BigWorld 1.8.6.1.

  • Fixed an issue with Base reference counting. If a Base is created and the Base Python script calls self.destroy() in __init__() , this can cause the Base obejct to be destructed prematurely which can cause dangling Python references.

  • Fixed a bug that could cause a CellApp assertion to be hit if a BaseApp dies.

BigWorld Technology 1.9.0.3 Server Release Notes


1. Bug Fixes

  • The web integration module sources are now included, The server Makefile will no longer fail due to these sources being missing (fixed since 1.9.0.1).

  • Fixed possible loss of ARRAY property data when two BigWorld.writeToDB operations for the same entity are performed concurrently in different threads in the DBMgr.

    Initially added in BigWorld 1.8.6.1.

BigWorld Technology 1.9.0.2 Server Release Notes


No changes were done to the server for 1.9.0.2.

BigWorld Technology 1.9.0.1 Server Release Notes


1. Bug Fixes

  • If multiple entities teleported between the same spaces, at the same time, it was possible for property changes that occurred just before teleporting, not to be propagated. This has now been fixed.

    Initially added in BigWorld 1.8.4.3.

  • Fixed a potential crash due channel being accessed after being deleted.

    Initially added in BigWorld 1.8.4.2.

  • Fixed a memory leak associated with unacked packets.

    Initially added in BigWorld 1.8.4.2.

  • Fixed a memory leak in the bots where calling Bot.moveTo( position ) was never releasing the memory associated with the previous movement destination.

    Initially added in BigWorld 1.8.4.2.

  • Fixed a problem where two clients could log in with the same account details at the same time. If Proxy.onLogOnAttempt allowed the second login, an assertion on the BaseApp could be triggered if both logins succeeded.

BigWorld Technology 1.9 Server Release Notes


1. Important Notes

  • Please refer to How To Convert to BigWorld 1.9 for more detailed information on migrating from BigWorld 1.8 to 1.9.

  • MySQL databases created by BigWorld 1.8.x must be upgraded to work correctly with BigWorld 1.9. Before starting the new server, backup your database and run:

              dbmgr -upgrade
            

    Please note that this operation only works if the tables in the database currently matches the entity definition. Do not attempt to upgrade the database and change the entity definition at the same time.

    In BigWorld 1.9, entity property columns have the "NOT NULL" specification. As part of the upgrade process, existing NULL values will be set to the default value of the property

  • The seeingHeight argument of the cell entity methods addVision and addScanVision has changed. See the details in the Changed Features section.

  • The BigWorld Technology suite now does some simple XML validation.

    Previously, badly formed XML was allowed, but this resulted in third-party applications being unable to parse XML resources.

    The main source of these problems is spaces in tag names and tag names beginning with numbers, which mostly occurs in three places:

    • .graph files, which have tags based upon a UID, and frequently begin with numbers.

    • Particle systems, which could have spaces in the sub-particle system names.

    • Node names in model files, which quite often have spaces in certain tags.

    In version 1.9, the use of such tags result in a warning being issued. Future versions of BigWorld Technology will make this an error.

    To fix these warnings, you can either manually edit the XML, or you can run AssetProcessor, which finds the locations of these errors (and in the cases of particle systems, models and graph files, fix them for you).

    Badly formed tags should be fixed as follows:

    • Spaces in tags should be replaced with '..' .

      For example, <my tag> should be replaced with <my..tag> .

      Internally what the tag refers to still retains the spaces, so for example, in Python or C++, a sub-particle system's name is referred to in exactly the same way as before.

    • UID tags in .graph files should be prefixed with 'id.' .

      For example, <0897F6FD.4B03ADAD.0F9401B6.C483C775> should be replaced with <id.0897F6FD.4B03ADAD.0F9401B6.C483C775> .

2. New Features

  • Added the BigWorld Web Integration Module. This module allows web servers to make method calls to entities on a running BigWorld server, and allows for the creation of web interfaces into your game, which can be accessible via PC browsers, mobile phones and other mobile devices. There are two flavours currently supported: Python and PHP.

    For details, see the document Web Integration Reference and How to Implement Web Integration .

  • Added the FLOAT64 data type, that corresponds to a IEEE 64-bit floating-point number.

    For details, see the document Server Programming Guide 's sections Properties -> Property Types -> Primitive Types and The Database Layer -> Mapping BigWorld Properties Into SQL -> Simple Data Types .

  • Added context support to mlcat.py and the WebConsole's LogViewer module.

    For details on mlcat.py , see the document Server Operations Guide 's section Admin Tools -> Logger Daemons -> MessageLogger -> Command-line Utilities .

    For details on WebConsole's LogViewer module, see the document Server Operations Guide 's section Admin Tools -> WebConsole -> Modules -> LogViewer and WebConsole's online help.

  • Added the configuration options cellApp/maxGhostsToDelete and cellApp/minGhostLifespan to allow control of anti-hysteresis in creation and deletion of ghost entities.

    For details, see the document Server Operations Guide 's section Server Configuration With bw.xml -> CellApp Configuration Options .

  • Added support to use of more CellApps to initially load the geometry of a space (if it has not been loaded, then more cells will be added, to help load the space faster).

    This is controlled by the cellAppMgr/maxLoadingCells and cellAppMgr/minLoadingArea configuration options in bw.xml .

    For details, see the document Server Operations Guide 's section Software Configuration With bw.xml -> CellAppMgr Configuration Options .

  • The optional argument shouldLoadOnServer has been added to BigWorld.addSpaceGeometryMapping on the CellApp.

    This argument also specifies whether the geometry should only be loaded on the client, but not on the server.

    For details, see the CellApp Python API and CellApp C++ API documentations.

  • The BigWorld version is now accessible in code as a string using the BWVersion::versionString() method.

  • Added the Entity.getDict method to cell entities, which is useful for debugging while inspecting all .def file properties. On other processes, the __dict__ property can be used.

    For details, see the CellApp Python API and CellApp C++ API documentations.

  • Added support for accessing entries in a FIXED_DICT using attribute syntax -- i.e. , you can use self.myDict.myValue as an alternative to self.myDict[ "myValue" ] .

    For details, see the document Server Programming Guide 's section Properties -> Property Types -> Composite Types -> FIXED_DICT Data Type .

  • Documentation strings can now be added to methods exposed to Python (via new macros like PY_METHOD_DECLARE_WITH_DOC ).

    For details, see the C++ API documentations, and src/lib/pyscript/pyobject_plus.hpp .

  • Added the configuration option cellApp/maxPhysicsNetworkJitter to allow control of tolerance for network jitter when performing physics validation.

    For details, see the document Server Operations Guide 's section Server Configuration With bw.xml -> CellApp Configuration Options .

  • When entity definitions are parsed, a warning is now emitted to the logger if PYTHON arguments are used in exposed methods. The presence of PYTHON args in Exposed methods represent a security risk and should be converted to use more concrete types such as FIXED_DICT .

  • Added a new type of script object, the user data object, which allows embedding user-defined data in chunk files. A key feature of user data objects is their linkability, which allows both entities and user data objects to link to other user data objects. They can be instantiated in the client or the server.

  • Added the option options/dbPrefix to StatLogger which allows multiple instances to be run on the same host.

    For details, see the document Server Operations Guide 's section Admin Tools -> StatLogger -> Option Configuration .

  • Added the python callback onBotsReady() to bots which is called when the process becomes initialised.

  • Added member base to CellViaBaseMailBox and cell to BaseViaCellMailBox which is a direct MailBox to the intermediary entity for convenience.

  • Added a Flush User Mappings page in the administrative page of Web Console. This allows the administrator to flush user mappings of all bwmachined processes in the network so that new UNIX users can be used to create a new Web Console account.

3. Changed Features

  • The seeingHeight argument of the cell entity methods Entity.addVision and Entity.addScanVision is no longer scaled down by 0.875.

    This scaling has been removed and the actual value passed in is now used.

  • BigWorld.createBaseAnywhere and BigWorld.createBaseRemotely can now accept data sections to describe the entity's properties.

    BigWorld.createBaseLocally has changed slightly to be consistent. Like the other BigWorld.createBase methods, it accepts multiple data sections.

  • The stream-data-to-client functionality formerly provided by Proxy.addProxyData is now provided by Proxy.streamStringToClient and Proxy.streamFileToClient .

    The callbacks on both the client and server have been renamed from onProxyDataDownloadComplete to onStreamComplete .

    Server-only customers should be aware that the onProxyData method in the ServerMessageHandler interface in servconn.hpp has been changed to onStreamComplete , and has a slightly different signature.

    For details, see the document Server Operations Guide 's section Software Configuration With bw.xml -> CellApp Configuration Options -> Download Streaming Configuration Options , and the BaseApp Python API and BaseApp C++ API documentations

  • CellApp's Entity.fieldOfView attribute has been deprecated, since it is confusing (it is actually half the field of view) -- please use Entity.visionAngle instead.

    For details, see the CellApp Python API and CellApp C++ API documentations.

  • The initial witnessed state of cell entities, as queried by Entity.isWitnessed , has changed to False.

    Previously, entities were created assuming that they had just been witnessed, causing Entity.onWitnessed( False ) being called 8-12 minutes after creation (assuming no witnessing occurs in this period).

    It has been changed so that entities are created assuming that they have not been witnessed, such that after entity creation, Entity.onWitnessed( False ) is now not called until after Entity.onWitnessed( True ) has been called when the entity has been witnessed.

    For details, see the CellApp Python API and CellApp C++ API documentations.

  • The FLOAT data type has been renamed to FLOAT32 . However, FLOAT is an alias for FLOAT32 , so existing entity definitions will still work.

    For details, see the document Server Programming Guide 's sections Properties -> Property Types -> Primitive Types and The Database Layer -> Mapping BigWorld Properties Into SQL -> Simple Data Types .

  • Old-style BaseApp backups ( i.e. , via change of the IP address) are no longer supported.

    For details, see the document Server Operations Guide 's section Fault Tolerance -> BaseApp Fault Tolerance , the document Server Overview 's section Server Components -> BaseApp -> Fault Tolerance , and the document Server Programming Guide 's section Fault Tolerance -> BaseApp Fault Tolerance .

  • The Cell Viewer protocol has changed to support sending of space geometry mapping information to connected viewer clients.

    The Cell Viewer now supports two extra message types to facilitate this: GET_VERSION and GET_SPACE_GEOMETRY_MAPPINGS .

    Space Viewer has added support for this by displaying the space geometry mapping in the top left corner of space viewer windows (however, this does not dynamically update at present).

    For using the new protocol, see cell_app_mgr_talker.py .

    For details on the new message types, see the CellAppMgr C++ API documentation.

  • CellApp watchers under the profiles/ and python/ directories have been standardised to camelCase format.

  • The macro to redefine when declaring EntityExtra derived class has changed from PY_METHOD_ATTRIBUTE to PY_METHOD_ATTRIBUTE_WITH_DOC .

    For details, see the C++ API documentation.

  • All database columns that map to entity properties now have the "NOT NULL" specification. Previously, this specification was missing but BigWorld never inserts NULL values into the database.

  • The bigworldTableMetadata has been removed. DBMgr now uses the table meta data provided by MySQL. If you have previously "tricked" DBMgr into accepting a schema which does not match the entity definition by modifying bigworldTableMetadata , it will no longer work.

  • Converted database tables bigworldGameTime, bigworldSpaces and bigworldSpaceData to use InnoDB instead of MyISAM. Now all tables created by BigWorld uses the InnoDB engine. As the result of this conversion the version column became unnecessary and has been dropped from bigworldSpaces and bigworldSpaceData.

  • The configuration option dbMgr/name has been deprecated - please use dbMgr/databaseName instead.

    For details, see the document Server Operations Guide 's section Server Configuration With bw.xml -> DBMgr Configuration Options .

  • When using new style BaseApp backup, BaseApps will only back up to BaseApps located on different physical machines if such BaseApps exist. This means that the system can survive the hardware failure of a physical machine running multiple BaseApps.

4. Bug Fixes

  • Reduced the creation of new CellAppChannel instances when a real entity is initially created on the wrong cell.

    For details on this class, see the CellApp C++ API documentation.

  • Improved error checking when accessing Entity.ownClient of entities that do not have a Witness .

    For details on this attribute, see the BaseApp Python API and CellApp Python API documentations.

  • Delayed the calling of Base.onGetCell until after the cell entity has been informed that it should have a witness.

    For details on this callback, see the BaseApp Python API documentation.

  • Fixed navigation mesh sharing, which was causing crashes in the case of different spaces with the same geometries mapped.

  • Fixed bug with base entity cellData['position'] and cellData['direction'] initially referencing the same Vector3 object.

  • Improved LoginApp's resilience to Denial-of-Server attacks by not using reliable communication mechanism for failed login attempts.

  • The zlib library has been updated from version 1.2.1 to version 1.2.3. This version includes some security fixes. See mf/src/lib/zip/ChangeLog for more details.

  • Fixed a bug that could cause entity positions on a client to be incorrect when travelling on a very fast moving vehicle. The vehicle's position must have changed by at least 128 metres in the round-trip time to the server.

  • Fixed a bug that caused entities riding on a vehicle to be restored to an incorrect position when restoring from their Base entity.

  • Fixed spurious error messages when trying to archive an entity that is in the process of destroying its cell part.

  • Fixed a DBMgr crash when writing an entity with a base property that does not match its type in the entity definition.

  • Fixed a bug in MLTar when extracting a log archive file, it was possible to create an unusable user log directory due to the particular user log directory not already existing before the extraction.

  • Fixed a bug with streaming on request messages onto packets in multi-packet bundles.

  • Fixed a bug where entities would get stuck when they passed through navpolys with zero distance between them.

5. Known Bugs & Limitations

  • For Linux machines running a kernel version 2.6 or greater, bwmachined will report slightly incorrect load under certain circumstances due to a change in the format of /proc/stat from kernel version 2.4.

    The load reporting issue will only manifest when the system is spending a significant time idling due to IOwait or IRQ handling situations. As this issue only impacts statistic reporting in StatLogger/StatGrapher as well as the values reported in the cluster view of WebConsole there should be no detrimental impact to your server cluster operation.

  • The file specified by resources.xml/system/terrain2 (by default, system/data/terrain2.xml ) is loaded each time that terrain is loaded. This can cause disk access in the main thread.

    To avoid this, load and store a reference to this file's data section in your cell's personality script. See fantasydemo/res/scripts/cell/FantasyDemo.py for an example.

  • Terrain Data uses a large amount of memory but it is not taken into account in load balancing.

  • The file specified by resources.xml/environment/materialKinds (by default, system/data/material_kinds.xml ) is loaded the first time a collision test occurs that involves terrain. This can cause disk access in the main thread.

    To avoid this, load and store a reference to this file's data section in your cell's personality script. See fantasydemo/res/scripts/cell/FantasyDemo.py for an example.

  • The UserDataObjectRef module is loaded the first time that it is needed. This can cause disk access in the main thread.

    To avoid this, import this module into your personality scripts. See fantasydemo/res/scripts/cell/FantasyDemo.py and fantasydemo/res/scripts/base/FantasyDemo.py for examples.

  • FIXED_DICT properties that have an <implementedBy> can cause a module to be imported the first time that the type is created. This can cause disk access in the main thread.

    To avoid this, import the necessary modules in the script file of the relevant entities or the personality scritps.

  • Currently, MySQL stored procedures are not supported when used with the BigWorld.executeRawDatabaseCommand method.

    For details on this method, see the document Server Programming Guide 's section The Database Layer -> Execute Arbitrary Commands On Database .

  • Due to the Watcher protocol changing as of 1.9.0, the server tools (WebConsole, StatLogger, ControlCluster, ...) are not backwards compatible. If your operational environment is still running 1.8.x servers it is recommended to maintain the existing server tools as forward compatibility has been maintained.

  • Customers using Debian Etch will experience issues with WebConsole and StatLogger failing overnight due to a MySQL reconnection issue. The cause of this issue is due to MySQL timing out inactive connections after 8 hours. Currently the default package versions of MySQL-python and SQLObject provided by Debian Etch do not include a known fix for this issue. The suggested work around for this problem is to restart WebConsole every morning prior to the majority of developers starting work. This can be achieved by added a cron job to the root user of the machine running WebConsole as follows:

              # 06:30 Mon-Fri: Restart WebConsole to avoid MySQL reconnection issues
    
    30 6 * * 1-5 /etc/init.d/bw_web_console restart
            
  • Tools startup scripts may fail to report when a tool has a problem starting if it terminated after it had detached.

  • BWMachined can crash if the messages it sends exceeds its internal limits, for example if it reports too many coredumps in one request.

  • A race condition can occur when a cell entity is created then immediately distroyed. This will cause the script to raise an exception. We recommend to either avoid doing this or handling the exception.

  • Too many python tracebacks caused by unhanded exceptions can cause CellApp to time out. It is recommended to deal with python exceptions as they arise.

  • DBMgr does not compile or run without using prepared statements despite looking like it should.

  • DBMgr has a race condition when destroy() and createBaseLocallyFromDBID() are used quickly together on the same entity.

    To reset an entity, it is better to create a method to delete non-persistant properties and call the destruction and creation callbacks than to reload it from DB.

  • Starting multiple copies of DBMgr simultaneously may cause system to crash. Please make sure an instance is not running before starting another.

  • Unreliable packets do not have a sequence number and can thus be replayed by malicious parties. BigWorld does not, as a general rule, use unreliable packets for highly sensitive data.

  • All internal server cluster traffic is regarded as trusted and may expose stability or security issues if invalid. This will not be an issue unless a server component has already become compromised.

  • Clients may report a negative latency. This will only happen when real latency is very close to zero.

  • The entity definition parser may assert when a def file contains contradictory information such as a default value that exceeds the maximum length of a property.

  • FIXED_DICT properties ignores assignments from invalid dictionaries but does not raise an exception.

    If a FIXED_DICT is not being propagated, please check that every key corresponds to key in the fixed dict.

  • Large servers cannot use multiple instances of stat logger or message logger to share the load.

    A single instance however should be able to handle a very large cluster.

  • Log output only works correctly with latin-1 encoding, try not to log unicode messages.

  • Multiple copies of CellAppMgr, BaseAppMgr and DBMgr can be started from WebConsole even though this configuration is not supported.

    Make sure a configuration makes sense before hitting "Go!".

  • Searching for very narrow time periods in LogViewer can sometime be slightly inaccurate.

    Please give it a few seconds margin of error on either side.

  • StatGrapher will occasionally fail to display certain time periods or display the wrong time period.

    Just give it another try.

  • StatGrapher has a memory leak.

    Please reload the page if flash is taking all of your memory.

  • There is an issue when cell entities pass their own mailbox from their __init__() function to the BaseApp that spawned them, and this cell mailbox is used for a remote method call. You can workaround this by using a short timer to delay any method calls that may pass a cell entity's mailbox to base methods until the next tick.