kumaab opened a new pull request, #1236:
URL: https://github.com/apache/ranger/pull/1236
## What changes were proposed in this pull request?
Ranger Admin container no longer runs `setup.sh` with `install.properties`:
it is configured at runtime and prepares its own database, aligning it with
Kubernetes-native deployment.
- `ranger-admin-site-<db>.yaml` in `scripts/admin/configs` holds Ranger
Admin properties for `postgres`, `mysql` and `oracle`; `dba.py` renders
`conf/ranger-admin-site.xml` from it over the distribution defaults, or from
`ranger-admin-site.yaml` of a mounted Kubernetes ConfigMap.
- `dba.py` stores the DB password in the credential store, imports the core
schema, applies pending DB/java patches and updates built-in user passwords
from `RANGER_*_PASSWORD`, recording the same `x_db_version_h` entries as
db_setup.py does.
- `create-ranger-services.py` creates services once the readiness health
check reports UP, queried as healthcheck user via trusted header authentication.
- `Dockerfile.ranger` bakes all DB connectors into one image, selected at
runtime by `RANGER_DB_TYPE`; unpacking in a build stage and hardlinking
duplicate jars reduce the image from **1.34 GB** to **0.76 GB.**
- Container logs show each bootstrap step, patch progress and the Ranger
Admin log.
## How was this patch tested?
- Fresh install on `postgres`, `mysql` and `oracle`: schema imported,
built-in user passwords set,
readiness UP, all dev services created; admin/usersync/tagsync/keyadmin
log in with the
configured passwords, while the default ones are rejected.
- Restart skips import, patches and password updates; pending SQL patch 078
and java patch
J10066 are re-applied on the next start, recording `DB_PATCHES` and
`JAVA_PATCHES`.
- A failing SQL and java patch stops the bootstrap with the patch name,
progress and error.
- Compared against `setup.sh` output of master: same x_db_version_h entries,
built-in users and
roles, tables and service-defs, same Ranger Admin process arguments and
effective config.
- Verified a mounted Kubernetes ConfigMap (ranger-admin-site.yaml) and
AUDIT_INDEX_STORE override.
## Admin Logs
~~~
━━━ ▶ ranger.sh · Ranger Admin container
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
18:11:51 INFO ✔ Prepared /opt/ranger/admin/ews/webapp/WEB-INF/classes/conf
from conf.dist and /opt/ranger/admin/configs, Ranger Admin log is sent to
console too
━━━ ▶ dba.py · Ranger Admin configuration and database bootstrap
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
18:11:51 INFO Preparing Ranger Admin 3.0.0-SNAPSHOT
(RANGER_DB_TYPE=postgres)
18:11:51 INFO ranger.audit.source.type: opensearch (from env
AUDIT_INDEX_STORE)
18:11:51 INFO ✔ Rendered conf/ranger-admin-site.xml: 32 properties from
/opt/ranger/admin/configs/ranger-admin-site-postgres.yaml applied over conf.dist
18:11:51 INFO Database: flavor=postgres,
url=jdbc:postgresql://ranger-db/ranger, user=rangeradmin,
driver=org.postgresql.Driver, jar=/usr/share/java/postgresql.jar
18:11:52 INFO ✔ Stored DB password with alias ranger.db.password in
credential store /etc/ranger/admin/rangeradmin.jceks
18:11:52 INFO ⏳ Waiting for database: SQLException : SQL state: 08001
org.postgresql.util.PSQLException: Connection to ranger-db:5432 refused. Check
that the
18:11:57 INFO ✔ Connected to jdbc:postgresql://ranger-db/ranger
18:11:57 INFO Table x_db_version_h not found: database is empty
18:11:57 INFO Importing core schema
/opt/ranger/admin/db/postgres/optimized/current/ranger_core_db_postgres.sql
18:11:58 INFO ✔ Imported core schema in 0.7s: 112 active entries in
x_db_version_h, attributed to 'Ranger 3.0.0-SNAPSHOT'
18:11:58 INFO SQL patches: 56 available, 0 pending
18:11:58 INFO Java patches: 52 available, 0 pending
18:12:02 INFO ✔ Updated default passwords of admin, rangerusersync,
rangertagsync, keyadmin in 4.1s, recorded DEFAULT_ALL_ADMIN_UPDATE
18:12:02 INFO ✔ Ranger Admin configuration and database are ready in 10.7s
━━━ ▶ Ranger Admin server · starting
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Starting Apache Ranger Admin Service
Apache Ranger Admin Service with pid 333 has started.
━━━ ▶ create-ranger-services.py · dev services
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
18:12:07 INFO ✔ Ranger Admin 3.0.0-SNAPSHOT is up and ready in 16s, 24
service-defs loaded
18:12:10 INFO ✔ dev_hdfs service created
18:12:10 INFO ✔ dev_yarn service created
18:12:11 INFO ✔ dev_hive service created
18:12:11 INFO ✔ dev_hbase service created
18:12:11 INFO ✔ dev_kafka service created
18:12:11 INFO ✔ dev_knox service created
18:12:11 INFO ✔ dev_kms service created
18:12:11 INFO ✔ dev_trino service created
18:12:11 INFO ✔ dev_ozone service created
18:12:11 INFO ✔ dev_solr service created
━━━ ▶ Ranger Admin server log · /var/log/ranger/{catalina.out,
ranger-admin-ranger.rangernw-.log} ━━━━━━━━━━━━
[0.000s][warning][gc] -Xloggc is deprecated. Will use
-Xlog:gc:/var/log/ranger/gc-worker.log instead.
[0.000s][warning][gc] -XX:+PrintGCDetails is deprecated. Will use -Xlog:gc*
instead.
[0.001s][info ][gc] Using G1
[0.112s][info ][gc] GC(0) Pause Young (Normal) (G1 Evacuation Pause)
33M->27M(256M) 2.449ms
[0.223s][info ][gc] GC(1) Pause Young (Normal) (G1 Evacuation Pause)
42M->29M(256M) 1.555ms
2026-09-17 18:12:02,850 [main] WARN [NativeCodeLoader.java:60] Unable to
load native-hadoop library for your platform... using builtin-java classes
where applicable
Sep 17, 2026 6:12:02 PM org.apache.ranger.server.tomcat.EmbeddedServer
getKeyManagers
WARNING: Unable to read credential from credential store file
[/etc/ranger/admin/rangeradmin.jceks] for given alias:keyStoreCredentialAlias
Sep 17, 2026 6:12:02 PM org.apache.ranger.server.tomcat.EmbeddedServer
getTrustManagers
WARNING: Config 'ranger.truststore.file' is not found or contains blank
value!
Sep 17, 2026 6:12:02 PM org.apache.ranger.server.tomcat.EmbeddedServer start
INFO: Deriving webapp folder from catalina.base property.
folder=/opt/ranger/ranger-3.0.0-SNAPSHOT-admin/ews/webapp
Sep 17, 2026 6:12:02 PM org.apache.ranger.server.tomcat.EmbeddedServer start
INFO: Webapp file =/opt/ranger/ranger-3.0.0-SNAPSHOT-admin/ews/webapp,
webAppName = /
Sep 17, 2026 6:12:02 PM org.apache.ranger.server.tomcat.EmbeddedServer start
INFO: Adding webapp [/] = path
[/opt/ranger/ranger-3.0.0-SNAPSHOT-admin/ews/webapp] .....
Sep 17, 2026 6:12:02 PM org.apache.catalina.core.StandardContext setPath
WARNING: A context path must either be an empty string or start with a '/'
and do not end with a '/'. The path [/] does not meet these criteria and has
been changed to []
Sep 17, 2026 6:12:02 PM org.apache.ranger.server.tomcat.EmbeddedServer start
INFO: Finished init of webapp [/] = path
[/opt/ranger/ranger-3.0.0-SNAPSHOT-admin/ews/webapp].
Sep 17, 2026 6:12:02 PM org.apache.ranger.server.tomcat.EmbeddedServer start
INFO: Name is empty. Setting Name Rule as 'DEFAULT'
Sep 17, 2026 6:12:02 PM org.apache.ranger.server.tomcat.EmbeddedServer
startServer
INFO: Server Name : rangeradmin
Sep 17, 2026 6:12:02 PM
org.apache.ranger.server.tomcat.OpenSearchIndexBootStrapper run
INFO: OpenSearchIndexBootStrapper: starting...
Sep 17, 2026 6:12:02 PM
org.apache.ranger.server.tomcat.OpenSearchIndexBootStrapper run
INFO: Trying to acquire OpenSearch connection
[0.419s][info ][gc] GC(2) Pause Young (Normal) (G1 Evacuation Pause)
63M->32M(256M) 2.068ms
Sep 17, 2026 6:12:03 PM org.apache.coyote.AbstractProtocol init
INFO: Initializing ProtocolHandler ["http-nio-6080"]
Sep 17, 2026 6:12:03 PM org.apache.catalina.core.StandardService
startInternal
INFO: Starting service [Tomcat]
Sep 17, 2026 6:12:03 PM org.apache.catalina.core.StandardEngine startInternal
INFO: Starting Servlet engine: [Apache Tomcat/9.0.120]
Sep 17, 2026 6:12:03 PM
org.apache.ranger.server.tomcat.OpenSearchIndexBootStrapper run
INFO: Connection to OpenSearch established successfully
Sep 17, 2026 6:12:03 PM
org.apache.ranger.server.tomcat.OpenSearchIndexBootStrapper logErrorAndWait
SEVERE: Error during OpenSearch bootstrap. [retrying after 60000 ms].
Attempts left: 29. Error: ranger-opensearch: Name or service not known
Sep 17, 2026 6:12:03 PM org.apache.catalina.startup.ContextConfig
getDefaultWebXmlFragment
INFO: No global web.xml found
[0.669s][info ][gc] GC(3) Pause Young (Normal) (G1 Evacuation Pause)
176M->43M(256M) 4.196ms
[0.780s][info ][gc] GC(4) Pause Young (Normal) (G1 Evacuation Pause)
168M->46M(256M) 8.954ms
[0.885s][info ][gc] GC(5) Pause Young (Normal) (G1 Evacuation Pause)
182M->46M(256M) 1.229ms
[1.005s][info ][gc] GC(6) Pause Young (Normal) (G1 Evacuation Pause)
195M->48M(256M) 1.262ms
[1.109s][info ][gc] GC(7) Pause Young (Normal) (G1 Evacuation Pause)
196M->48M(256M) 1.219ms
[1.217s][info ][gc] GC(8) Pause Young (Normal) (G1 Evacuation Pause)
195M->50M(256M) 1.639ms
[1.327s][info ][gc] GC(9) Pause Young (Normal) (G1 Evacuation Pause)
197M->45M(256M) 0.953ms
Sep 17, 2026 6:12:03 PM org.apache.jasper.servlet.TldScanner scanJars
INFO: At least one JAR was scanned for TLDs yet contained no TLDs. Enable
debug logging for this logger for a complete list of JARs that were scanned but
no TLDs were found in them. Skipping unneeded JARs during scanning can improve
startup time and JSP compilation time.
Sep 17, 2026 6:12:03 PM org.apache.catalina.core.ApplicationContext log
INFO: No Spring WebApplicationInitializer types detected on classpath
Sep 17, 2026 6:12:03 PM org.apache.catalina.core.ApplicationContext log
INFO: Initializing Spring root WebApplicationContext
[1.558s][info ][gc] GC(10) Pause Young (Normal) (G1 Evacuation Pause)
197M->49M(256M) 1.747ms
[1.778s][info ][gc] GC(11) Pause Young (Normal) (G1 Evacuation Pause)
196M->52M(256M) 2.202ms
2026-09-17 18:12:04,428 [main] WARN [NativeCodeLoader.java:60] Unable to
load native-hadoop library for your platform... using builtin-java classes
where applicable
2026-09-17 18:12:04,470 [main] INFO [PropertiesUtil.java:283] unixauth
keystore password not applied; clear text password shall be applicable
2026-09-17 18:12:04,475 [main] INFO [PropertiesUtil.java:297] unixauth
truststore password not applied; clear text password shall be applicable
2026-09-17 18:12:04,527 [main] INFO [PropertiesUtil.java:331] Credential
keystore password not applied for Audit DB; clear text password shall be
applicable
2026-09-17 18:12:04,529 [main] INFO [PropertiesUtil.java:517]
ranger.jpa.jdbc.url=jdbc:postgresql://ranger-db/ranger
2026-09-17 18:12:04,530 [main] INFO [PropertiesUtil.java:605] Using / as the
RegEx Separator
2026-09-17 18:12:04,530 [main] INFO [PropertiesUtil.java:605] Using / as the
RegEx Separator
[2.034s][info ][gc] GC(12) Pause Young (Normal) (G1 Evacuation Pause)
196M->55M(256M) 2.626ms
[2.172s][info ][gc] GC(13) Pause Young (Normal) (G1 Evacuation Pause)
196M->56M(256M) 2.398ms
[EL Warning]: metadata: 2026-09-17
18:12:04.866--ServerSession(225598992)--You have specified multiple ids for the
entity class [org.apache.ranger.entity.view.VXXPrincipal] without specifying an
@IdClass. By doing this you may lose the ability to find by identity,
distributed cache support etc. Note: You may however use EntityManager find
operations by passing a list of primary key fields. Else, you will have to use
JPQL queries to read your entities. For other id options see @PrimaryKey.
[2.320s][info ][gc] GC(14) Pause Young (Normal) (G1 Evacuation Pause)
197M->66M(256M) 3.913ms
[2.514s][info ][gc] GC(15) Pause Young (Normal) (G1 Evacuation Pause)
201M->68M(256M) 4.492ms
2026-09-17 18:12:05,105 [main] INFO [RangerTransactionService.java:72]
ranger.admin.transaction.service.threadpool.size=1
2026-09-17 18:12:05,105 [main] INFO [RangerTransactionService.java:73]
ranger.admin.transaction.service.summary.log.interval.sec=300
2026-09-17 18:12:05,111 [main] INFO [RangerBizUtil.java:151]
java.library.path is /usr/java/packages/lib:/usr/lib64:/lib64:/lib:/usr/lib
2026-09-17 18:12:05,111 [main] INFO [RangerBizUtil.java:152] Audit
datasource is opensearch
2026-09-17 18:12:05,154 [main] INFO [BaseDao.java:391]
ranger.admin.dao.batch.delete.batch.size=1000
2026-09-17 18:12:05,241 [main] INFO
[RangerSecurityZoneServiceService.java:81]
ranger.admin.store.security.zone.compress.json_data=false
2026-09-17 18:12:05,250 [main] INFO [RangerCache.java:79] Created
RangerCache(name=gds-info): loaderThreadsCount=1, refreshMode=ON_ACCESS,
valueValidityPeriodMs=0, valueInitLoadTimeoutMs=-1,
valueRefreshLoadTimeoutMs=10000
2026-09-17 18:12:05,268 [main] INFO [SolrMgr.java:229] ==>SolrMgr.init()
2026-09-17 18:12:05,269 [main] INFO [SolrMgr.java:241] Loading SolrClient
JAAS config from Ranger audit config if present...
2026-09-17 18:12:05,271 [main] INFO [SolrMgr.java:252] <==SolrMgr.init()
2026-09-17 18:12:05,349 [main] INFO [AssetMgr.java:175] ==> AssetMgr.init()
2026-09-17 18:12:05,349 [main] INFO [AssetMgr.java:181]
ranger.log.SC_NOT_MODIFIED=false
2026-09-17 18:12:05,349 [main] INFO [AssetMgr.java:182]
ranger.plugin.activity.audit.not.modified=false
2026-09-17 18:12:05,349 [main] INFO [AssetMgr.java:183]
ranger.plugin.activity.audit.commit.inline=false
2026-09-17 18:12:05,349 [main] INFO [AssetMgr.java:185] <== AssetMgr.init()
2026-09-17 18:12:05,350 [main] INFO [ServiceDBStore.java:1992]
ranger.admin.null_safe.supplier=v2
2026-09-17 18:12:05,350 [main] INFO [ServiceDBStore.java:2013]
SUPPORTS_POLICY_DELTAS=false
2026-09-17 18:12:05,350 [main] INFO [ServiceDBStore.java:2014]
RETENTION_PERIOD_IN_DAYS=7
2026-09-17 18:12:05,350 [main] INFO [ServiceDBStore.java:2015]
TAG_RETENTION_PERIOD_IN_DAYS=3
2026-09-17 18:12:05,351 [main] INFO [ServiceDBStore.java:2016]
SUPPORTS_PURGE_LOGIN_RECORDS=false
2026-09-17 18:12:05,351 [main] INFO [ServiceDBStore.java:2017]
LOGIN_RECORDS_RETENTION_PERIOD_IN_DAYS=0
2026-09-17 18:12:05,351 [main] INFO [ServiceDBStore.java:2018]
SUPPORTS_PURGE_TRANSACTION_RECORDS=false
2026-09-17 18:12:05,351 [main] INFO [ServiceDBStore.java:2019]
TRANSACTION_RECORDS_RETENTION_PERIOD_IN_DAYS=0
2026-09-17 18:12:05,351 [main] INFO [ServiceDBStore.java:2020]
SUPPORTS_PURGE_POLICY_EXPORT_LOGS=false
2026-09-17 18:12:05,351 [main] INFO [ServiceDBStore.java:2021]
POLICY_EXPORT_LOGS_RETENTION_PERIOD_IN_DAYS=0
2026-09-17 18:12:05,351 [main] INFO [ServiceDBStore.java:2022]
isRolesDownloadedByService=false
2026-09-17 18:12:05,351 [main] INFO [ServiceDBStore.java:2023]
SUPPORTS_IN_PLACE_POLICY_UPDATES=false
[2.814s][info ][gc] GC(16) Pause Young (Normal) (G1 Evacuation Pause)
209M->73M(256M) 4.312ms
2026-09-17 18:12:05,676 [main] INFO [ServiceDBStore.java:2586] ==>
ServiceDBStore.getServiceUpgraded()
2026-09-17 18:12:05,676 [main] INFO [ServiceDBStore.java:5696] Adding custom
properties to services
[3.101s][info ][gc] GC(17) Pause Young (Normal) (G1 Evacuation Pause)
212M->77M(256M) 2.613ms
2026-09-17 18:12:05,692 [main] INFO [RangerBizUtil.java:1000] User session
not found, granting access.
2026-09-17 18:12:05,692 [main] INFO [ServiceDBStore.java:2590] <==
ServiceDBStore.getServiceUpgraded()
2026-09-17 18:12:05,766 [main] INFO [RangerCSRFPreventionFilter.java:93]
Adding cross-site request forgery (CSRF) protection
[3.341s][info ][gc] GC(18) Pause Young (Normal) (G1 Evacuation Pause)
213M->80M(256M) 3.249ms
2026-09-17 18:12:06,093 [main] INFO [RangerJsonProvider.java:53]
RangerJsonProvider() instantiated with Jackson JSON processing and enhanced
configuration
[3.525s][info ][gc] GC(19) Pause Young (Normal) (G1 Evacuation Pause)
214M->86M(256M) 3.548ms
[3.626s][info ][gc] GC(20) Pause Young (Normal) (G1 Evacuation Pause)
212M->87M(256M) 3.400ms
Sep 17, 2026 6:12:06 PM org.glassfish.jersey.internal.Errors logErrors
WARNING: The following warnings have been detected: WARNING: Parameter
policyLabelsService of type
org.apache.ranger.service.RangerPolicyLabelsService<org.apache.ranger.entity.XXPolicyLabel,
?> from
org.apache.ranger.service.RangerPolicyLabelsService<org.apache.ranger.entity.XXPolicyLabel,
?> org.apache.ranger.rest.ServiceREST.policyLabelsService is not resolvable to
a concrete type.
Sep 17, 2026 6:12:06 PM org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["http-nio-6080"]
2026-09-17 18:12:07,726 [http-nio-6080-exec-1] INFO [XUserMgr.java:3930]
User created: healthcheck
2026-09-17 18:12:07,737 [http-nio-6080-exec-1] INFO [XUserMgr.java:282]
Permission assigned to user: [healthcheck] For Module: [Resource Based Policies]
2026-09-17 18:12:07,739 [http-nio-6080-exec-1] INFO [XUserMgr.java:282]
Permission assigned to user: [healthcheck] For Module: [Reports]
2026-09-17 18:12:07,740 [http-nio-6080-exec-1] INFO [XUserMgr.java:282]
Permission assigned to user: [healthcheck] For Module: [Security Zone]
2026-09-17 18:12:07,762 [http-nio-6080-exec-1] INFO
[RangerRESTAPIFilter.java:211] Done rearranging. loopCount = 0
2026-09-17 18:12:07,762 [http-nio-6080-exec-1] INFO
[RangerRESTAPIFilter.java:220] Loaded 0 API methods.
2026-09-17 18:12:10,559 [http-nio-6080-exec-3] INFO
[SpringEventListener.java:72] Login Successful:admin | Ip
Address:0:0:0:0:0:0:0:1 sessionId=B2A5CDCECA0EA072F73864A97CC2018F |
Epoch=1789668730559
[8.040s][info ][gc] GC(21) Pause Young (Normal) (G1 Evacuation Pause)
215M->92M(256M) 4.468ms
2026-09-17 18:12:10,700 [http-nio-6080-exec-4] INFO
[RangerBaseService.java:165] dev_hdfs: looking for additional default policies
in service-config
2026-09-17 18:12:10,700 [http-nio-6080-exec-4] INFO
[RangerBaseService.java:175] dev_hdfs: found 2 additional default policies in
service-config
2026-09-17 18:12:10,702 [http-nio-6080-exec-4] INFO
[RangerBaseService.java:366] dev_hdfs: adding default policy: name=hive-tez-path
2026-09-17 18:12:10,702 [http-nio-6080-exec-4] INFO
[RangerBaseService.java:366] dev_hdfs: adding default policy:
name=ranger-audit-path
2026-09-17 18:12:10,776 [http-nio-6080-exec-4] INFO [ServiceREST.java:4802]
Successfully retrieved resource-service:[dev_hdfs]
2026-09-17 18:12:10,776 [http-nio-6080-exec-4] INFO [ServiceREST.java:4818]
creating service [dev_tag]
2026-09-17 18:12:10,821 [http-nio-6080-exec-4] INFO [ServiceREST.java:4854]
Successfully retrieved resource-service:[dev_hdfs]
2026-09-17 18:12:10,822 [http-nio-6080-exec-4] INFO [ServiceREST.java:4861]
Successfully retrieved service:[dev_tag]
2026-09-17 18:12:10,822 [http-nio-6080-exec-4] INFO [ServiceREST.java:4866]
Linking resource-service[dev_hdfs] with tag-service [dev_tag]
2026-09-17 18:12:10,843 [http-nio-6080-exec-4] INFO [ServiceREST.java:4870]
Updated resource-service:[dev_hdfs]
2026-09-17 18:12:10,848 [http-nio-6080-exec-4] INFO [XUserMgr.java:3930]
User created: hdfs
2026-09-17 18:12:10,851 [http-nio-6080-exec-4] INFO [XUserMgr.java:282]
Permission assigned to user: [hdfs] For Module: [Resource Based Policies]
2026-09-17 18:12:10,852 [http-nio-6080-exec-4] INFO [XUserMgr.java:282]
Permission assigned to user: [hdfs] For Module: [Reports]
2026-09-17 18:12:10,853 [http-nio-6080-exec-4] INFO [XUserMgr.java:282]
Permission assigned to user: [hdfs] For Module: [Security Zone]
2026-09-17 18:12:10,856 [http-nio-6080-exec-4] INFO [XUserMgr.java:3930]
User created: hive
2026-09-17 18:12:10,857 [http-nio-6080-exec-4] INFO [XUserMgr.java:282]
Permission assigned to user: [hive] For Module: [Resource Based Policies]
2026-09-17 18:12:10,858 [http-nio-6080-exec-4] INFO [XUserMgr.java:282]
Permission assigned to user: [hive] For Module: [Reports]
2026-09-17 18:12:10,859 [http-nio-6080-exec-4] INFO [XUserMgr.java:282]
Permission assigned to user: [hive] For Module: [Security Zone]
2026-09-17 18:12:10,861 [http-nio-6080-exec-4] INFO [XUserMgr.java:3930]
User created: hbase
~~~
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]