Skip to content

Objects with long names break the current implementation #882

@YanehCheck

Description

@YanehCheck

Currently, objects have no upper bound on their name length (or other equivalent identifiers). This causes issues with the current business and data storage logic.

For example, scenes and projects with names over 250 characters break the project service as their names are used for the file representing them. The underlying filesystem rejects them because, along with their .json file extension, the file names go over 255 characters. The project service then fails to find this file on subsequent requests, making the ARServer crash on each lookup.

Communication Log:

Sent a new ARCOR2 message:
{"id":27,"request":"NewScene","args":{"name":"INSERT_VERY_LONG_SCENE_NAME","description":"description"},"dry_run":false}
Received a new ARCOR2 message:
{"id":27,"response":"NewScene","result":true}
Received a new ARCOR2 message:
{"event":"OpenScene","data":{"scene":{"name":"INSERT_VERY_LONG_SCENE_NAME","description":"description","id":"scn_8bbc0e6e88214bc9b8ece4ec2beaa5d5","objects":[]}}}
Received a new ARCOR2 message:
{"event":"SceneState","data":{"state":"stopped"}}
Sent a new ARCOR2 message:
{"id":28,"request":"SaveScene","dry_run":false}
Received a new ARCOR2 message:
{"id":28,"response":"SaveScene","result":false,"messages":["Failed to add or update the scene."]}

Docker Log:

2025-04-01 19:06:38 fit-demo-arserver                | 2025-04-01 17:06:38 INFO     ARServer 1.3.1 (API version 1.1.0) initialized.
2025-04-01 19:06:38 fit-demo-arserver                | 2025-04-01 17:06:38 WARNING  Development mode. The service will shutdown on any unhandled exception.
2025-04-01 19:09:36 fit-demo-arserver                | 2025-04-01 17:09:36 INFO     Registering new ui
2025-04-01 19:13:50 fit-demo-arserver                | 2025-04-01 17:13:50 WARNING  NewScene callback took 0.158s.
2025-04-01 19:06:18 fit-demo-project                 | Time:     2025-04-01T17:06:18.022
2025-04-01 19:14:00 fit-demo-arserver                | 2025-04-01 17:14:00 ERROR    Failed to add or update the scene. Kinalisoft.Project.WebApi (AssetSystem): Unable to store asset in file system. The path '/tmp/assets/data/INSERT_VERY_LONG_SCENE_NAME.json' is too long, or a component of the specified path is too long.
2025-04-01 19:06:18 fit-demo-project                 | Name:     ConfigureServices
2025-04-01 19:06:18 fit-demo-project                 | Duration: 540.913ms
2025-04-01 19:06:18 fit-demo-project                 | Events:
2025-04-01 19:06:18 fit-demo-project                 | 
2025-04-01 19:06:18 fit-demo-project                 | Time:     2025-04-01T17:06:18.640
2025-04-01 19:06:18 fit-demo-project                 | Name:     Configure
2025-04-01 19:06:18 fit-demo-project                 | Duration: 123.304ms
2025-04-01 19:06:18 fit-demo-project                 | Events:
2025-04-01 19:06:18 fit-demo-project                 |      Method Arguments [17:06:18.667] Info
2025-04-01 19:06:18 fit-demo-project                 |         address: http://*:10000
2025-04-01 19:06:18 fit-demo-project                 | 
2025-04-01 19:06:18 fit-demo-project                 | Hosting environment: Production
2025-04-01 19:06:18 fit-demo-project                 | Content root path: /app/Kinalisoft.Project.WebApi
2025-04-01 19:06:18 fit-demo-project                 | Now listening on: http://[::]:10000
2025-04-01 19:06:18 fit-demo-project                 | Application started. Press Ctrl+C to shut down.
2025-04-01 19:14:00 fit-demo-project                 | Time:     2025-04-01T17:14:00.075
2025-04-01 19:14:00 fit-demo-project                 | Name:     ScenesController.PutScene (Kinalisoft.Project.WebApi.Controllers)
2025-04-01 19:14:00 fit-demo-project                 | Duration: 178.628ms
2025-04-01 19:14:00 fit-demo-project                 | Events:
2025-04-01 19:14:00 fit-demo-project                 |      Method Arguments [17:14:00.078] Debug
2025-04-01 19:14:00 fit-demo-project                 |         scene: {Objects:[],Name:INSERT_VERY_LONG_SCENE_NAME,Description:description,Created:null,Modified:null,Id:scn_8bbc0e6e88214bc9b8ece4ec2beaa5d5}
2025-04-01 19:14:00 fit-demo-project                 |      Exception [17:14:00.218] Error
2025-04-01 19:14:00 fit-demo-project                 |         Message: Unable to store asset in file system. The path '/tmp/assets/data/INSERT_VERY_LONG_SCENE_NAME.json' is too long, or a component of the specified path is too long.
2025-04-01 19:14:00 fit-demo-project                 |         Type: Kinalisoft.Core.Assets.AssetSystemException
2025-04-01 19:14:00 fit-demo-project                 |         StackTrace:    at Kinalisoft.Asset.Web.WebAssetExtensions.ThrowIfNotSuccessful(Task`1 responseTask) in /home/gitlab-runner/builds/TxhCoNhN/0/test-it-off/asset/asset/Kinalisoft.Asset.Web/WebAssetExtensions.cs:line 89
2025-04-01 19:14:00 fit-demo-project                 |    at Kinalisoft.Asset.Web.WebAssetExtensions.ThrowIfNotSuccessfulOrRetrieve[T](Task`1 responseTask) in /home/gitlab-runner/builds/TxhCoNhN/0/test-it-off/asset/asset/Kinalisoft.Asset.Web/WebAssetExtensions.cs:line 108
2025-04-01 19:14:00 fit-demo-project                 |    at Kinalisoft.Asset.Web.WebAssetSystem.CreateAsset(String id, String filePath, String description, String type, String[] dependencies, Byte[] assetData, String[] tags) in /home/gitlab-runner/builds/TxhCoNhN/0/test-it-off/asset/asset/Kinalisoft.Asset.Web/WebAssetSystem.cs:line 119
2025-04-01 19:14:00 fit-demo-project                 |    at Kinalisoft.Core.Assets.TypedAssetSystem.CreateAsset[T](String id, String filePath, T dataObject, String description, String[] tags) in /home/gitlab-runner/builds/GfkVtuaM/0/common-net/core/Kinalisoft.Core/Assets/TypedAssetSystem.cs:line 188
2025-04-01 19:14:00 fit-demo-project                 |    at Kinalisoft.Project.Web.Extensions.AssetSystemExtensions.PutAsset[T](TypedAssetSystem assets, String id, String name, String extension, String description, T asset) in /src/Kinalisoft.Project.Web/Extensions/AssetSystemExtensions.cs:line 132
2025-04-01 19:14:00 fit-demo-project                 |    at Kinalisoft.Project.Web.Extensions.AssetSystemExtensions.PutInfoObjectAsset[T](TypedAssetSystem assets, String id, String name, String description, T asset) in /src/Kinalisoft.Project.Web/Extensions/AssetSystemExtensions.cs:line 74
2025-04-01 19:14:00 fit-demo-project                 |    at Kinalisoft.Project.Web.Scenes.ScenesService.PutScene(Scene scene) in /src/Kinalisoft.Project.Web/Scenes/ScenesService.cs:line 44
2025-04-01 19:14:00 fit-demo-project                 |    at lambda_method23(Closure, Object, Object[])
2025-04-01 19:14:00 fit-demo-project                 |    at Microsoft.AspNetCore.Mvc.Infrastructure.ActionMethodExecutor.SyncObjectResultExecutor.Execute(ActionContext actionContext, IActionResultTypeMapper mapper, ObjectMethodExecutor executor, Object controller, Object[] arguments)
2025-04-01 19:14:00 fit-demo-project                 |    at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.InvokeActionMethodAsync()
2025-04-01 19:14:00 fit-demo-project                 |    at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted)
2025-04-01 19:14:00 fit-demo-project                 |    at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.InvokeNextActionFilterAsync()
2025-04-01 19:14:00 fit-demo-project                 | --- End of stack trace from previous location ---
2025-04-01 19:14:00 fit-demo-project                 |    at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Rethrow(ActionExecutedContextSealed context)
2025-04-01 19:14:00 fit-demo-project                 |    at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted)
2025-04-01 19:14:00 fit-demo-project                 |    at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.InvokeInnerFilterAsync()
2025-04-01 19:14:00 fit-demo-project                 | --- End of stack trace from previous location ---
2025-04-01 19:14:00 fit-demo-project                 |    at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.g__Awaited|26_0(ResourceInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)
2025-04-01 19:14:00 fit-demo-project                 |      Return value [17:14:00.252] Debug
2025-04-01 19:14:00 fit-demo-project                 |         {StatusCode:500,WebApiError:{Service:Kinalisoft.Project.WebApi,Message:Unable to store asset in file system. The path \u0027/tmp/assets/data/INSERT_VERY_LONG_SCENE_NAME.json\u0027 is too long, or a component of the specified path is too long.,Type:AssetSystem,Description:Occurs when internal problem in asset system is encountered.,Content:null}}

A similar issue happens when adding new object types. This only returns an (unintended) error message and does not permanently affect the server's functionality or raise any errors within the server's logs.

Communication Log:

Sent a new ARCOR2 message:
{"id":26,"request":"NewObjectType","args":{"type":"INSERT_VERY_LONG_TYPE_NAME","description":"description","built_in":false,"base":"Generic","has_pose":false,"abstract":false,"disabled":false,"settings":[]},"dry_run":false}
Received a new ARCOR2 message:
{"id":26,"response":"NewObjectType","result":false,"messages":["Unhandled exception in save_and_import_type_def."]}

This is not an issue with packages (via BuildProject RPC) and other objects (e.g. ActionObjects).


Additionally, Windows-hosted servers further disallow some names (AUX, NUL, CON, ...)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions