[ 
https://issues.apache.org/jira/browse/SENTRY-2342?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Na Li reassigned SENTRY-2342:
-----------------------------

    Assignee:     (was: Na Li)

> Update schema version verification to support multi-version clusters share 
> same DB
> ----------------------------------------------------------------------------------
>
>                 Key: SENTRY-2342
>                 URL: https://issues.apache.org/jira/browse/SENTRY-2342
>             Project: Sentry
>          Issue Type: New Feature
>          Components: Sentry
>    Affects Versions: 2.1.0
>            Reporter: Na Li
>            Priority: Critical
>         Attachments: SENTRY-2342.001.patch, SENTRY-2342.001.patch
>
>
> Right now, sentry software has the schema version it supports hard-coded, and 
> before starting its service, it gets schema version from DB and compare these 
> two values. If they are not equal, exception will be thrown and sentry 
> service won't start.
> To support sentry services with different versions that connect to the same 
> DB at the same time, the schema version checking behavior has to be changed 
> to allow sentry software with older version to work with DB with newer schema 
> version.
> There are two places that verifies schema version
> 1) In SentrySchemaTool when schema is created in DB or upgraded in DB.  The 
> schema verification should be strict, i.e., ensure the Sentry Server version 
> is exactly the same as the DB schema version.
> 2) SentryStore when Sentry service is started after creating schema or 
> upgrading schema in DB. The schema verification should be loose, i.e., ensure 
> the Sentry Server schema version is compatible with the DB schema version.
> When checking compatible in isSchemaVersionCompatible, 
> 1) If DB version is based on schema version used by Sentry Server (DB version 
> string starts with Sentry Server schema version), then it is compatible with 
> Sentry server
> 2) DB version is shorter than the schema version used by Sentry Server, not 
> compatible
> 3) major version number not equal, not compatible
> 4) sentry server has same major version but newer minor version than DB, not 
> compatible.
> 5) sentry server has same major version but equal or smaller minor version 
> than DB, compatible.
> The call stack when schema verification fails in SentryStore. 
> {code}
> Exception in thread "main" java.lang.IllegalStateException: Could not create 
> org.apache.sentry.provider.db.service.persistent.SentryStore
>       at 
> org.apache.sentry.service.thrift.SentryService.getSentryStore(SentryService.java:210)
>       at 
> org.apache.sentry.service.thrift.SentryService.<init>(SentryService.java:168)
>       at 
> org.apache.sentry.service.thrift.SentryService$CommandImpl.run(SentryService.java:601)
>       at org.apache.sentry.SentryMain.main(SentryMain.java:117)
>       at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>       at 
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
>       at 
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>       at java.lang.reflect.Method.invoke(Method.java:498)
>       at org.apache.hadoop.util.RunJar.run(RunJar.java:226)
>       at org.apache.hadoop.util.RunJar.main(RunJar.java:141)
> Caused by: java.lang.reflect.InvocationTargetException
>       at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
>       at 
> sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
>       at 
> sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
>       at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
>       at 
> org.apache.sentry.service.thrift.SentryService.getSentryStore(SentryService.java:194)
>       ... 9 more
> Caused by: org.apache.sentry.provider.db.SentryAccessDeniedException: The 
> Sentry store schema version <DB_version> is different from distribution 
> version <Sentry_Server_Version>
>       at 
> org.apache.sentry.provider.db.service.persistent.SentryStore.verifySentryStoreSchema(SentryStore.java:280)
>       at 
> org.apache.sentry.provider.db.service.persistent.SentryStore.<init>(SentryStore.java:253)
>       ... 14 more
> {code}



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to