Hi Dong, which version of the Kylin build that you deployed?

In last week we found a bug which will cause Kylin fail to allocate a new
a segment; Kylin will report error saying that the startDate is not
matched with expectation; Here is the JIRA:

https://issues.apache.org/jira/browse/KYLIN-628

If you¹re using Kylin¹s binary package, please update to the latest one on
https://kylin.incubator.apache.org/download/
If you¹re running from source code, please pull the latest code on staging
branch;   

On 3/16/15, 7:40 PM, "dong wang" <[email protected]> wrote:

>since the following codes pass invalid startdate and enddate, which leads
>to the issue
>
>  public CubeSegment appendSegments(CubeInstance cube, long endDate)
>throws
>IOException {
>        checkNoBuildingSegment(cube);
>
>        CubeSegment newSegment;
>        if
>(cube.getDescriptor().getModel().getPartitionDesc().isPartitioned()) {
>            long startDate = calculateStartDateForAppendSegment(cube);
>            newSegment = newSegment(cube, startDate, endDate);
>        } else {
>            newSegment = newSegment(cube, 0, Long.MAX_VALUE);
>        }
>
>        validateNewSegments(cube, newSegment);
>        cube.getSegments().add(newSegment);
>        Collections.sort(cube.getSegments());
>        updateCube(cube);
>
>        return newSegment;
>    }
>
>2015-03-16 19:38 GMT+08:00 dong wang <[email protected]>:
>
>> The related codes, since I'm not that clear about the logic it should
>>be:
>>
>>   private CubeSegment newSegment(CubeInstance cubeInstance, long
>> startDate, long endDate) {
>>         if (startDate >= endDate)
>>             throw new IllegalArgumentException("New segment range
>>invalid,
>> start date must be earlier than end date, " + startDate + " < " +
>>endDate);
>>
>>         CubeSegment segment = new CubeSegment();
>>         String incrementalSegName =
>>CubeSegment.getSegmentName(startDate,
>> endDate);
>>         segment.setUuid(UUID.randomUUID().toString());
>>         segment.setName(incrementalSegName);
>>         Date creatTime = new Date();
>>         segment.setCreateTimeUTC(creatTime.getTime());
>>         segment.setDateRangeStart(startDate);
>>         segment.setDateRangeEnd(endDate);
>>         segment.setStatus(SegmentStatusEnum.NEW);
>>         segment.setStorageLocationIdentifier(generateStorageLocation());
>>
>>         segment.setCubeInstance(cubeInstance);
>>
>>         segment.validate();
>>         return segment;
>>     }
>>
>> 2015-03-16 19:29 GMT+08:00 dong wang <[email protected]>:
>>
>>> more notes. this segment to be refreshed is built sccessful first,
>>>then,
>>> I plan to refresh it due to some incorrect data.
>>>
>>> 2015-03-16 19:25 GMT+08:00 dong wang <[email protected]>:
>>>
>>>> watched with firebug, the parameters pass to the backend seem to be
>>>> CORRECT as below:
>>>>
>>>> {buildType: "BUILD", startTime: 1426377600000, endTime: 1426464000000}
>>>>
>>>> 2015-03-16 19:15 GMT+08:00 dong wang <[email protected]>:
>>>>
>>>>> segment detail page shows:
>>>>>
>>>>> Start Date (Include) 2015-03-15 00:00:00
>>>>> End Date (Exclude) 2015-03-16 00:00:00
>>>>>
>>>>> 2015-03-16 19:11 GMT+08:00 dong wang <[email protected]>:
>>>>>
>>>>>> The latest segment is the newest one which contains today's data,
>>>>>>due
>>>>>> to some incorrect data, I want to refresh the segment, however, when
>>>>>> cube->actions->refresh->select the latest segment, then the
>>>>>>following error
>>>>>> occurs:
>>>>>>
>>>>>> New segment range invalid, start date must be earlier than end date,
>>>>>> 1426464000000 < 1426464000000
>>>>>>
>>>>>
>>>>>
>>>>
>>>
>>

Reply via email to