Сервер: вер. 5.2 сборка 1645 от 16.08.2016 17:11:56
os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.6.0_26
phone вер. 5.2 сборка 286 от 25.05.2016 12:23:30
Привет.
Начали использовать пакеты трафика через узел "диапазон трафика".
Стал замечать, что при переобсчёте задним числом на тех же данных стали сползать начисления.
Например, в пакет минут входят местные и мобильные (устанавливаем зону "Пакет"), а сверх пакета местные - бесплатно, а мобильные - платно.
В итоге тарификация получается недетерминированной.
Посмотрел по коду - думаю, проблема в том, что тарификацию выполняют 2 параллельных процесса FindItemConveyor:
Код:
Conveyor.process("data-process-log", new TariffConveyor(this.setup, this, con),
Arrays.asList(new FindItemConveyor[] {
new FindItemConveyor(this.setup, this, processIn, rangeMapCache), new FindItemConveyor(this.setup, this, processIn, rangeMapCache) }));
...
public static <T, C> void process(String name, Conveyor<T, ? extends ConveyorContext<T>, ? extends ThreadContext> conveyor, List<? extends Callable<C>> tasks)
throws InterruptedException, ExecutionException
{
ExecutorService executorService = WorkerTask.newFixedThreadPool(name, null, conveyor, tasks.size());
List futures = executorService.invokeAll(tasks);
ConcurrentUtils.awaitFutures(futures);
executorService.shutdown();
executorService.awaitTermination(1L, TimeUnit.DAYS);
conveyor.sync.acquire();
conveyor.shutdown();
for (Future future : futures)
{
future.get();
}
}
А внутри FindItemConveyor они по-очереди берут по 20 CDR для обработки.
Опыты не проводил, но логически скорее всего проблема именно тут.
Т.е. для одного и того же договора видимо данные тарифицируются в разное время в разной последовательности.