Среда, 27.11.2024, 15:21
Главная Регистрация RSS
Приветствую Вас, Гость
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Ошибка обновления испорченного кэша компоненты
sarge061Дата: Четверг, 08.08.2024, 17:45 | Сообщение # 1
Рядовой
Группа: Пользователи
Сообщений: 8
Репутация: 4
Статус: Оффлайн


Ошибка в коде, при испорченном кэше компоненты не происходит обновление суффикса, поскольку флаг КэшКомпонентыИспорчен устанавливается после вызова исключения при попытке создания нового экземпляра компонента.

Прикрепления: 4165501.png (23.0 Kb) · 3168899.png (83.5 Kb)


Сообщение отредактировал sarge061 - Четверг, 08.08.2024, 17:58
 
tormozitДата: Четверг, 08.08.2024, 19:09 | Сообщение # 2
Генералиссимус
Группа: Администраторы
Сообщений: 6460
Репутация: 168
Статус: Оффлайн
Попробуй начать с описания пользовательской проблемы и предоставления технической информации.

Цитата sarge061 ()
вызова исключения при попытке создания нового экземпляра компонента

В этой ситуации переименование внешней компоненты не приводило к обходу ошибки. Поэтому флаг устанавливается именно после создания объекта компоненты умышленно.
 
sarge061Дата: Четверг, 08.08.2024, 20:02 | Сообщение # 3
Рядовой
Группа: Пользователи
Сообщений: 8
Репутация: 4
Статус: Оффлайн
Я обнаружил ошибку при использовании многопоточности подбора. Управляющий фоновый поток при попытке поставить паузу уходит в вечный цикл, поскольку исключение происходит на создании нового объекта компоненты, соответственно флаг не сбрасыватся в Истина, а итерации счетчика не происходит. не знаю, как задумывался этот код и флаги, но он некорректно обрабатывает описанную мной ситуацию.
Логично перенести итерацию счетчика и флаг испорченного кэша в верхнюю функцию в блок обработки исключения.
 
tormozitДата: Четверг, 08.08.2024, 20:59 | Сообщение # 4
Генералиссимус
Группа: Администраторы
Сообщений: 6460
Репутация: 168
Статус: Оффлайн
Цитата sarge061 ()
исключение происходит на создании нового объекта компоненты

Какое исключение циклически возникает при создании объекта внешней компоненты?
И еще раз прошу предоставить техническую информацию.
 
tormozitДата: Четверг, 08.08.2024, 21:42 | Сообщение # 5
Генералиссимус
Группа: Администраторы
Сообщений: 6460
Репутация: 168
Статус: Оффлайн
Цитата tormozit ()
уходит в вечный цикл

Возможность вечного цикла подтверждаю https://www.hostedredmine.com/issues/990508
 
sarge061Дата: Четверг, 08.08.2024, 21:45 | Сообщение # 6
Рядовой
Группа: Пользователи
Сообщений: 8
Репутация: 4
Статус: Оффлайн

Вот здесь исключение. Текста его я не вижу, поскольку в коде описание ошибки не сохраняется в переменную, а увидеть его в отладчике через функцию нельзя.
Прикрепления: 3394060.png (16.9 Kb)
 
tormozitДата: Четверг, 08.08.2024, 21:50 | Сообщение # 7
Генералиссимус
Группа: Администраторы
Сообщений: 6460
Репутация: 168
Статус: Оффлайн
Код
Если ЗначениеЗаполнено(Суффикс) И Не КэшКомпонентыИспорчен Тогда
                ВызватьИсключение;
            КонецЕсли;


Попробуй вставить это сразу после "Исключение"
 
sarge061Дата: Четверг, 08.08.2024, 22:08 | Сообщение # 8
Рядовой
Группа: Пользователи
Сообщений: 8
Репутация: 4
Статус: Оффлайн
Это не поможет, суффикс всегда будет пустой, т.к. флаг порченного кэша никогда не получает Истина, как и счетчик не двигается.
 
tormozitДата: Четверг, 08.08.2024, 22:45 | Сообщение # 9
Генералиссимус
Группа: Администраторы
Сообщений: 6460
Репутация: 168
Статус: Оффлайн
Согласен, лучше полный текст сразу

Код
Функция НоваяВКОбщаяЛкс(Счетчик = 0) Экспорт
    
    Суффикс = "";
    Пока Счетчик < 60 Цикл
        КэшКомпонентыИспорчен = Ложь;
        Попытка
            //ВК = Новый ("AddIn.ирОбщая" + Суффикс + ".AddIn"); // При порче кэша тут попытка не срабатывала и исключение шло в вызывающий метод
            ВК = СоздатьВКОбщая(КэшКомпонентыИспорчен, Суффикс, Счетчик);
            Прервать;
        Исключение
            Если ЗначениеЗаполнено(Суффикс) И Не КэшКомпонентыИспорчен Тогда
                ВызватьИсключение;
            КонецЕсли;
            // https://www.hostedredmine.com/issues/889213
            // Занимаем новую ячейку в кэше внутренних компонент рабочего процесса.
            Суффикс = XMLСтрока(Счетчик);
            Это64битныйПроцесс = ирКэш.Это64битныйПроцессЛкс();
            ИмяМакета = "ВК";
            Если Это64битныйПроцесс Тогда
                ИмяМакета = ИмяМакета + "64";
            Иначе
                ИмяМакета = ИмяМакета + "32";
            КонецЕсли;
            Если ирКэш.ЛиПортативныйРежимЛкс() Тогда
                ДвоичныеДанные = ирПортативный.ПолучитьМакет(ИмяМакета);
                АдресКомпоненты = ПолучитьИмяВременногоФайла("dll");
                ДвоичныеДанные.Записать(АдресКомпоненты);
                //АдресКомпоненты = "D:\VC\Native_Comp_RDT\binWin32\AddInNative.dll"; // Для отладки
            Иначе
                // https://www.hostedredmine.com/issues/967297
                //ДвоичныеДанные = Обработки.ирПортативный.ПолучитьМакет(ИмяМакета);
                АдресКомпоненты = "Обработка.ирПортативный.Макет." + ИмяМакета;
            КонецЕсли;
            Результат = ПодключитьВнешнююКомпоненту(АдресКомпоненты, "ирОбщая" + Суффикс, ТипВнешнейКомпоненты.Native);
            Если Не Результат Тогда
                ВызватьИсключение "Не удалось подключить внешнюю компоненту Общая";
            КонецЕсли;
        КонецПопытки;
    КонецЦикла;
    Возврат ВК;

КонецФункции
 
sarge061Дата: Пятница, 09.08.2024, 14:42 | Сообщение # 10
Рядовой
Группа: Пользователи
Сообщений: 8
Репутация: 4
Статус: Оффлайн
Добавил обновленный код, но сразу предупрежу, что он в случае исключения попытается зарегистрировать утилиту с постфиксом 0, далее все последующие попытки будут с тем же постфиксом 0, поскольку итерация счетчика на происходит (исключение на попытке создания объекта).
 
tormozitДата: Пятница, 09.08.2024, 23:17 | Сообщение # 11
Генералиссимус
Группа: Администраторы
Сообщений: 6460
Репутация: 168
Статус: Оффлайн
Цитата sarge061 ()
все последующие попытки будут с тем же постфиксом 0

Верно. Но ты упустил что таких попыток будет всего одна.
 
tormozitДата: Воскресенье, 11.08.2024, 22:11 | Сообщение # 12
Генералиссимус
Группа: Администраторы
Сообщений: 6460
Репутация: 168
Статус: Оффлайн
Исправлено в 7.39
 
  • Страница 1 из 1
  • 1
Поиск: