[ 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)