Azure Programowanie

Nazwy tasków w Azure Batch

Ostatnio dość dużo pracowałem z usługą Azure Batch. W trakcie prac pojawiło się (jak zwykle) parę problemów. Jednym z nich były zbyt długie lub zawierające niedozwolone znaki ID Taska.

Wyjątek

Efektem tego było wystąpienie wyjątku Microsoft.Azure.Batch.AddTaskCollectionTerminatedException. Natomiast w szczegółach pojawiał się kod i wiadomość wyjątku o następującej treści:Error.Code=InvalidPropertyValue, Error.Message=The value provided for one of the properties in the request body is invalid.. Powód to tak jak pisałem długość i rodzaj znaków w id dodawanego taska: Task ids can only contain any combination of alphanumeric characters along with dash (-) and underscore (_). The name must be from 1 through 64 characters long.

Wyjaśnienie

Działo się tak, gdyż ID Taska było nadawane dynamicznie i składało się z ID (Guid-a) wykonywanej pracy oraz nazwy procesowanego pliku. Takie dynamiczne tworzenie id taska powodowało zbyt dużą długość. Problemem były też znaki - niedozwolone są znaki spoza: alfanumerycznych, podkreślnika i myślnika. Wszelkie znaki specjalne, spacje, dwukropki itp. są niedozwolone.

Rozwiązanie

Po znalezieniu problemu rozwiązanie jest banalnie proste. Wystarczy zostawić w id taska tylko dozwolone znaki i skrócić go do maksymalnie 64 znaków. W tym celu napisałem extension method, którym się dzielę:

Pewnie pomyślisz dlaczego nie zastosowałem tutaj Regexa? Otóż Regex był 3 krotnie wolniejszy od powyższego rozwiązania z LINQ. W przypadku rozwiązania, które tworzyłem czas to faktycznie pieniądz, bo dodawanie tasków uruchamiane jest w Azure Functions, w którym płaci się nie tylko za liczbę ale i za czas wywołania.

Zostaw odpowiedź

Twój adres email nie zostanie upubliczniony.* Pola wymagane *

This site uses Akismet to reduce spam. Learn how your comment data is processed.