A few additional comments:
1) In REST api response, if the exception message is null like NPE, we'd
better display the exception class, otherwise kylin user have to
investigate the root cause from log.
2) Control the cube metadata during creation is a good approach, but may we
disable the invalid cube or mark the cube status as invalid instead of
influencing all the other cubes while having problem with single cube? The
invalid cube status may be caused because metadata is bad, hbase is
unstable, underly hbase table/region is not found or inconsistent and so on.

Regards,
Hao

On Thu, Mar 3, 2016 at 10:04 AM, Zhao, John <[email protected]> wrote:

> That’s right, before we store the metadata, we need make sure it already
> passed all the check.
>
> --
> Best regards,
> John Zhao
>
> Cell: +1 (408) 464-5225
>
>
>
>
>
>
>
>
>
> On 3/2/16, 6:59 PM, "hongbin ma" <[email protected]> wrote:
>
> >btw, is it leaving a inconsistent state in the metadata store (cube
> >instance exist but cube desc or model missing)? if it is, please
> elaborate.
> >In that case something needs improving int the cube create controller,
> etc.
> >
> >On Thu, Mar 3, 2016 at 10:56 AM, hongbin ma <[email protected]> wrote:
> >
> >> as the stacktrace said:
> >>
> >> java.lang.IllegalStateException: Derived can only be defined on lookup
> >> table,
> >>
> >> you need to redefine the cube desc
> >>
> >> On Thu, Mar 3, 2016 at 6:44 AM, zhaoyunjiong (JIRA) <[email protected]>
> >> wrote:
> >>
> >>> zhaoyunjiong created KYLIN-1464:
> >>> -----------------------------------
> >>>
> >>>              Summary:
> org.apache.kylin.cube.CubeInstance.getDataModelDesc
> >>> throw java.lang.NullPointerException
> >>>                  Key: KYLIN-1464
> >>>                  URL: https://issues.apache.org/jira/browse/KYLIN-1464
> >>>              Project: Kylin
> >>>           Issue Type: Bug
> >>>             Reporter: zhaoyunjiong
> >>>             Assignee: zhaoyunjiong
> >>>
> >>>
> >>> User report can't see models from Web UI.
> >>> After I check log, I found java.lang.NullPointerException
> >>> {quote}
> >>> 2016-03-02 08:06:59,645 ERROR [http-bio-7070-exec-22]
> >>> controller.BasicController:44 :
> >>> java.lang.NullPointerException
> >>>         at
> >>>
> org.apache.kylin.cube.CubeInstance.getDataModelDesc(CubeInstance.java:128)
> >>>         at
> >>>
> org.apache.kylin.metadata.MetadataManager.getModels(MetadataManager.java:326)
> >>>         at
> >>>
> org.apache.kylin.rest.service.ModelService.listAllModels(ModelService.java:55)
> >>>         at
> >>>
> org.apache.kylin.rest.service.ModelService.getModels(ModelService.java:74)
> >>>         at
> >>>
> org.apache.kylin.rest.service.ModelService$$FastClassByCGLIB$$eb0205be.invoke(<generated>)
> >>>         at net.sf.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204)
> >>>         at
> >>>
> org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedInterceptor.intercept(Cglib2AopProxy.java:618)
> >>>         at
> >>>
> org.apache.kylin.rest.service.ModelService$$EnhancerByCGLIB$$2e750d6d.getModels(<generated>)
> >>>         at
> >>>
> org.apache.kylin.rest.controller.ModelController.getModels(ModelController.java:71)
> >>>         at sun.reflect.GeneratedMethodAccessor164.invoke(Unknown
> Source)
> >>>         at
> >>>
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> >>>         at java.lang.reflect.Method.invoke(Method.java:606)
> >>>         at
> >>>
> org.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:213)
> >>>         at
> >>>
> org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:126)
> >>>         at
> >>>
> org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:96)
> >>>         at
> >>>
> org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:617)
> >>>         at
> >>>
> org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:578)
> >>>         at
> >>>
> org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:80)
> >>>         at
> >>>
> org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:923)
> >>>         at
> >>>
> org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:852)
> >>>         at
> >>>
> org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:882)
> >>> {quote}
> >>>
> >>> And before that we can see from log why it happens.
> >>> {quote}
> >>> 2016-03-02 08:06:59,238 INFO  [http-bio-7070-exec-22]
> >>> cube.CubeDescManager:197 : Reloading Cube Metadata from folder
> >>> _kylin_metadata_qa2(key='/cube_desc')@_kylin_metadata_qa2@hbase
> >>> 2016-03-02 08:06:59,632 ERROR [http-bio-7070-exec-22]
> >>> cube.CubeDescManager:207 : Error loading cube desc
> /cube_desc/test4.json
> >>> java.lang.IllegalStateException: Derived can only be defined on lookup
> >>> table, cube CubeDesc [name=test4], DimensionDesc
> >>> [name=DEFAULT.SLNG_CATEG_META_LVL2_DERIVED, join=null, hierarchy=null,
> >>> table=DEFAULT.SLNG_CATEG_META_LVL2, column=null,
> derived=[CATEG_LVL2_NAME,
> >>> META_CATEG_NAME]]
> >>>         at
> >>> org.apache.kylin.cube.model.DimensionDesc.init(DimensionDesc.java:111)
> >>>         at org.apache.kylin.cube.model.CubeDesc.init(CubeDesc.java:461)
> >>>         at
> >>>
> org.apache.kylin.cube.CubeDescManager.loadCubeDesc(CubeDescManager.java:134)
> >>>         at
> >>>
> org.apache.kylin.cube.CubeDescManager.reloadAllCubeDesc(CubeDescManager.java:205)
> >>>         at
> >>> org.apache.kylin.cube.CubeDescManager.<init>(CubeDescManager.java:94)
> >>>         at
> >>>
> org.apache.kylin.cube.CubeDescManager.getInstance(CubeDescManager.java:74)
> >>>         at
> >>> org.apache.kylin.cube.CubeInstance.getDescriptor(CubeInstance.java:123)
> >>>         at
> >>>
> org.apache.kylin.cube.CubeInstance.getDataModelDesc(CubeInstance.java:128)
> >>>         at
> >>>
> org.apache.kylin.metadata.MetadataManager.getModels(MetadataManager.java:326)
> >>>         at
> >>>
> org.apache.kylin.rest.service.ModelService.listAllModels(ModelService.java:55)
> >>>         at
> >>>
> org.apache.kylin.rest.service.ModelService.getModels(ModelService.java:74)
> >>>         at
> >>>
> org.apache.kylin.rest.service.ModelService$$FastClassByCGLIB$$eb0205be.invoke(<generated>)
> >>>         at net.sf.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204)
> >>>         at
> >>>
> org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedInterceptor.intercept(Cglib2AopProxy.java:618)
> >>>         at
> >>>
> org.apache.kylin.rest.service.ModelService$$EnhancerByCGLIB$$2e750d6d.getModels(<generated>)
> >>>         at
> >>>
> org.apache.kylin.rest.controller.ModelController.getModels(ModelController.java:71)
> >>>         at sun.reflect.GeneratedMethodAccessor164.invoke(Unknown
> Source)
> >>>         at
> >>>
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> >>>         at java.lang.reflect.Method.invoke(Method.java:606)
> >>>         at
> >>>
> org.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:213)
> >>>         at
> >>>
> org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:
> >>> {quote}
> >>>
> >>>
> >>>
> >>> --
> >>> This message was sent by Atlassian JIRA
> >>> (v6.3.4#6332)
> >>>
> >>
> >>
> >>
> >> --
> >> Regards,
> >>
> >> *Bin Mahone | 马洪宾*
> >> Apache Kylin: http://kylin.io
> >> Github: https://github.com/binmahone
> >>
> >
> >
> >
> >--
> >Regards,
> >
> >*Bin Mahone | 马洪宾*
> >Apache Kylin: http://kylin.io
> >Github: https://github.com/binmahone
>

Reply via email to