stiefeljackal / JworkzNeosFixFrickenSync

A mod that will fix the stuck sync bug that had plagued users since the end of 2021.
GNU General Public License v2.0
10 stars 2 forks source link

Neos Fix Fricken Sync (JworkzNeosFixFrickenSync)

A image of the video demonstrating a fixed sync loop

A NeosModLoader mod for Neos VR that fixes the "stuck sync" issue and is provided as a solution for #3915 on NeosPublic. Additionally, this mod contains an automatic retry sync feature that will retry a failed sync based on the specific failure state.

Installation

  1. Install NeosModLoader.
  2. Place JworkzNeosFixFrickenSync.dll into your nml_mods folder. This folder should be located in the same folder as Neos. For a default installation, the typical location is C:\Program Files (x86)\Steam\steamapps\common\NeosVR\nml_mods. You can create it if it's missing, or if you launch the game once with NeosModLoader installed it will create the folder for you.
  3. Start the game. If you want to verify that the mod is working, you can check your Neos logs.

Config Options

Config Option Default Description
enabled true Enables the mod.
retryCount 3 The number of times to retry failed sync actions.
retryDelay TimeSpan.Zero The delay between attempts to retry failed sync actions.
enableInProgressLogging false Allow the sync task to periodically log its progress. Stage updates are unaffected.

Allowing Your Mods to Subscribe to Sync Task Events

If you are a Mod developer and would like for your mod to to listen to sync task events, then your mod can subscribe to the following events:

Event Name Description
UploadTaskStart When the sync queue receives a new sync task to sync.
UploadTaskProgress When a sync task makes progress.
UploadTaskSuccess When a sync task is successful.
UploadTaskFailure when a sync task failed.

All event handlers are located in the RecordUploadTaskBasePatch class as static event handlers.

The True Explanation of Stuck Sync

Although the NeosVR wiki makes it sound like a "stuck sync" is a normal thing in Neos, this is not the case. The unfortunate truth behind the "Stuck Sync" issue is due to a bug in the sync loop where unhandled exceptions (aka errors) are not being handled within the sync loop, causing the loop to stop. The most common exception thrown is one where the upload task is being marked as complete twice when a sync failure occurs due to the Neos Cloud returning an HTTP error code. Because tasks cannot be marked complete more than once, an exception is thrown within the loop that causes the loop to stop.

Syncing errors should occur normally, but they should not be halting other sync tasks. If this bug was addressed, then the follow status would be shown:

Sync Error! Check log for details

NeosPublic Issues This Mod Resolves for "Stuck Sync"

Thank You