Skip to content

Commit

Permalink
FLUME-2937. Integrate checkstyle for non-test classes
Browse files Browse the repository at this point in the history
Based on the Google checkstyle file with modifications.

The changes here do not change the generated Java bytecode (after
stripping line numbers). They are syntax / whitespace ONLY.

Code review: https://reviews.apache.org/r/49403/

Reviewed by Hari.
  • Loading branch information
mpercy committed Jun 30, 2016
1 parent 2fe3938 commit 2252fb1
Show file tree
Hide file tree
Showing 244 changed files with 3,823 additions and 3,436 deletions.
36 changes: 36 additions & 0 deletions flume-checkstyle/pom.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
<!--
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements. See the NOTICE file
distributed with this work for additional information
regarding copyright ownership. The ASF licenses this file
to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express or implied. See the License for the
specific language governing permissions and limitations
under the License.
-->

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<!--
<parent>
<artifactId>flume-parent</artifactId>
<groupId>org.apache.flume</groupId>
<version>1.7.0-SNAPSHOT</version>
</parent>
-->

<groupId>org.apache.flume</groupId>
<artifactId>flume-checkstyle</artifactId>
<name>Flume checkstyle project</name>
<version>1.7.0-SNAPSHOT</version>
</project>
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suppressions PUBLIC
"-//Puppy Crawl//DTD Suppressions 1.0//EN"
"http://www.puppycrawl.com/dtds/suppressions_1_0.dtd">
<suppressions>

<!-- Suppress all style checks for generated code -->
<suppress checks=".*"
files="generated-sources|com/cloudera/flume/handlers/thrift|org/apache/flume/thrift/|org/apache/flume/source/scribe|ProtosFactory.java"/>

<!-- The "legacy" sources have a weird camelCaps package name -->
<suppress checks="PackageName"
files="org/apache/flume/source/avroLegacy|org/apache/flume/source/thriftLegacy"/>

<!-- TODO: Rearrange methods in below classes to keep overloaded methods adjacent -->
<suppress checks="OverloadMethodsDeclarationOrder"
files="channel/file|RpcClientFactory\.java|BucketPath\.java|SinkGroup\.java|DefaultSinkProcessor\.java|RegexExtractorInterceptorMillisSerializer\.java|SimpleAsyncHbaseEventSerializer\.java|hdfs/BucketWriter\.java"/>

<!-- TODO: Fix inner class names to follow standard convention -->
<suppress checks="TypeName"
files="SyslogUDPSource\.java|SyslogTcpSource\.java|TaildirSource\.java"/>

<!-- TODO: Add default cases to switch statements -->
<suppress checks="MissingSwitchDefault"
files="SyslogUtils\.java|ReliableTaildirEventReader\.java"/>

<!-- TODO: Avoid empty catch blocks -->
<suppress checks="EmptyCatchBlock"
files="channel/file/LogFile\.java"/>

<!-- TODO: Avoid empty if blocks -->
<suppress checks="EmptyBlockCheck"
files="ElasticSearchClientFactory\.java"/>

<!-- TODO: Fix line length issues -->
<suppress checks="LineLengthCheck"
files="channel/MemoryChannel\.java|ReliableSpoolingFileEventReader\.java"/>

<!-- TODO: Move helper classes to their own files -->
<suppress checks="OneTopLevelClass"
files="KafkaSource\.java|KafkaChannel\.java|KafkaSink\.java"/>

</suppressions>
177 changes: 177 additions & 0 deletions flume-checkstyle/src/main/resources/flume/checkstyle.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,177 @@
<?xml version="1.0"?>
<!DOCTYPE module PUBLIC
"-//Puppy Crawl//DTD Check Configuration 1.3//EN"
"http://www.puppycrawl.com/dtds/configuration_1_3.dtd">

<!--
Checkstyle configuration that checks the Google coding conventions from Google Java Style
that can be found at https://google.github.io/styleguide/javaguide.html.
Checkstyle is very configurable. Be sure to read the documentation at
http://checkstyle.sf.net (or in your downloaded distribution).
To completely disable a check, just comment it out or delete it from the file.
Authors: Max Vetrenko, Ruslan Diachenko, Roman Ivanov.
-->

<module name = "Checker">
<property name="charset" value="UTF-8"/>

<property name="severity" value="warning"/>

<property name="fileExtensions" value="java, properties, xml"/>
<!-- Checks for whitespace -->
<!-- See http://checkstyle.sf.net/config_whitespace.html -->
<module name="FileTabCharacter">
<property name="eachLine" value="true"/>
</module>

<module name="TreeWalker">
<module name="OuterTypeFilename"/>
<module name="IllegalTokenText">
<property name="tokens" value="STRING_LITERAL, CHAR_LITERAL"/>
<property name="format" value="\\u00(08|09|0(a|A)|0(c|C)|0(d|D)|22|27|5(C|c))|\\(0(10|11|12|14|15|42|47)|134)"/>
<property name="message" value="Avoid using corresponding octal or Unicode escape."/>
</module>
<module name="AvoidEscapedUnicodeCharacters">
<property name="allowEscapesForControlCharacters" value="true"/>
<property name="allowByTailComment" value="true"/>
<property name="allowNonPrintableEscapes" value="true"/>
</module>
<module name="LineLength">
<property name="max" value="100"/>
<property name="ignorePattern" value="^package.*|^import.*|a href|href|http://|https://|ftp://"/>
</module>
<module name="AvoidStarImport">
<property name="allowStaticMemberImports" value="true"/>
</module>
<module name="OneTopLevelClass"/>
<module name="NoLineWrap"/>
<module name="EmptyBlock">
<property name="option" value="TEXT"/>
<property name="tokens" value="LITERAL_TRY, LITERAL_FINALLY, LITERAL_IF, LITERAL_ELSE, LITERAL_SWITCH"/>
</module>
<module name="NeedBraces">
<property name="allowSingleLineStatement" value="true"/>
</module>
<module name="LeftCurly">
<property name="maxLineLength" value="100"/>
</module>
<module name="RightCurly"/>
<module name="RightCurly">
<property name="option" value="alone"/>
<property name="tokens" value="CLASS_DEF, METHOD_DEF, CTOR_DEF, LITERAL_FOR, LITERAL_WHILE, LITERAL_DO, STATIC_INIT, INSTANCE_INIT"/>
</module>
<module name="WhitespaceAround">
<property name="allowEmptyConstructors" value="true"/>
<property name="allowEmptyMethods" value="true"/>
<property name="allowEmptyTypes" value="true"/>
<property name="allowEmptyLoops" value="true"/>
<message key="ws.notFollowed"
value="WhitespaceAround: ''{0}'' is not followed by whitespace. Empty blocks may only be represented as '{}' when not part of a multi-block statement (4.1.3)"/>
<message key="ws.notPreceded"
value="WhitespaceAround: ''{0}'' is not preceded with whitespace."/>
</module>
<module name="OneStatementPerLine"/>
<module name="ArrayTypeStyle"/>
<module name="MissingSwitchDefault"/>
<module name="FallThrough"/>
<module name="UpperEll"/>
<module name="ModifierOrder"/>
<module name="EmptyLineSeparator">
<property name="allowNoEmptyLineBetweenFields" value="true"/>
<property name="allowMultipleEmptyLines" value="false"/>
<property name="allowMultipleEmptyLinesInsideClassMembers" value="false"/>
<property name="tokens" value="IMPORT, CLASS_DEF, INTERFACE_DEF, ENUM_DEF, STATIC_INIT, INSTANCE_INIT, CTOR_DEF, VARIABLE_DEF"/>
</module>
<module name="SeparatorWrap">
<property name="tokens" value="DOT"/>
<property name="option" value="nl"/>
</module>
<module name="SeparatorWrap">
<property name="tokens" value="COMMA"/>
<property name="option" value="EOL"/>
</module>
<module name="PackageName">
<property name="format" value="^[a-z]+(\.[a-z][a-z0-9]*)*$"/>
<message key="name.invalidPattern"
value="Package name ''{0}'' must match pattern ''{1}''."/>
</module>
<module name="TypeName">
<message key="name.invalidPattern"
value="Type name ''{0}'' must match pattern ''{1}''."/>
</module>
<module name="ClassTypeParameterName">
<property name="format" value="(^[A-Z][0-9]?)$|([A-Z][a-zA-Z0-9]*[T]$)"/>
<message key="name.invalidPattern"
value="Class type name ''{0}'' must match pattern ''{1}''."/>
</module>
<module name="MethodTypeParameterName">
<property name="format" value="(^[A-Z][0-9]?)$|([A-Z][a-zA-Z0-9]*[T]$)"/>
<message key="name.invalidPattern"
value="Method type name ''{0}'' must match pattern ''{1}''."/>
</module>
<module name="InterfaceTypeParameterName">
<property name="format" value="(^[A-Z][0-9]?)$|([A-Z][a-zA-Z0-9]*[T]$)"/>
<message key="name.invalidPattern"
value="Interface type name ''{0}'' must match pattern ''{1}''."/>
</module>
<module name="NoFinalizer"/>
<module name="GenericWhitespace">
<message key="ws.followed"
value="GenericWhitespace ''{0}'' is followed by whitespace."/>
<message key="ws.preceded"
value="GenericWhitespace ''{0}'' is preceded with whitespace."/>
<message key="ws.illegalFollow"
value="GenericWhitespace ''{0}'' should followed by whitespace."/>
<message key="ws.notPreceded"
value="GenericWhitespace ''{0}'' is not preceded with whitespace."/>
</module>
<module name="Indentation">
<property name="basicOffset" value="2"/>
<property name="braceAdjustment" value="0"/>
<property name="caseIndent" value="2"/>
<property name="throwsIndent" value="4"/>
<property name="lineWrappingIndentation" value="4"/>
<property name="arrayInitIndent" value="2"/>
</module>
<module name="OverloadMethodsDeclarationOrder"/>
<module name="MethodParamPad"/>
<module name="AnnotationLocation">
<property name="tokens" value="CLASS_DEF, INTERFACE_DEF, ENUM_DEF, METHOD_DEF, CTOR_DEF"/>
</module>
<module name="AnnotationLocation">
<property name="tokens" value="VARIABLE_DEF"/>
<property name="allowSamelineMultipleAnnotations" value="true"/>
</module>
<module name="AtclauseOrder">
<property name="tagOrder" value="@param, @return, @throws, @deprecated"/>
<property name="target" value="CLASS_DEF, INTERFACE_DEF, ENUM_DEF, METHOD_DEF, CTOR_DEF, VARIABLE_DEF"/>
</module>
<module name="JavadocMethod">
<property name="scope" value="public"/>
<property name="allowMissingJavadoc" value="true"/>
<property name="allowMissingParamTags" value="true"/>
<property name="allowMissingThrowsTags" value="true"/>
<property name="allowMissingReturnTag" value="true"/>
<property name="minLineCount" value="0"/>
<property name="allowedAnnotations" value="Override, Test"/>
<property name="allowThrowsTagsForSubclasses" value="true"/>
</module>
<module name="MethodName">
<property name="format" value="^[a-z][a-z0-9][a-zA-Z0-9_]*$"/>
<message key="name.invalidPattern"
value="Method name ''{0}'' must match pattern ''{1}''."/>
</module>
<module name="SingleLineJavadoc">
<property name="ignoreInlineTags" value="false"/>
</module>
<module name="EmptyCatchBlock">
<property name="exceptionVariableName" value="expected"/>
</module>
<module name="CommentsIndentation">
<property name="tokens" value="BLOCK_COMMENT_BEGIN"/>
</module>
</module>
</module>
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,8 @@
public class SecureRpcClientFactory {

/**
* Return a secure {@linkplain org.apache.flume.api.RpcClient} that uses Thrift for communicating with
* the next hop.
* Return a secure {@linkplain org.apache.flume.api.RpcClient} that uses Thrift for communicating
* with the next hop.
* @param props
* @return - An {@linkplain org.apache.flume.api.RpcClient} which uses thrift configured with the
* given parameters.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,10 @@
import org.apache.flume.auth.FlumeAuthenticationUtil;
import org.apache.flume.auth.FlumeAuthenticator;
import org.apache.flume.auth.PrivilegedExecutor;
import org.apache.thrift.transport.*;
import org.apache.thrift.transport.TSaslClientTransport;
import org.apache.thrift.transport.TSocket;
import org.apache.thrift.transport.TTransport;
import org.apache.thrift.transport.TTransportException;

import javax.security.auth.callback.CallbackHandler;
import javax.security.sasl.Sasl;
Expand Down Expand Up @@ -52,9 +55,9 @@ protected void configure(Properties properties) throws FlumeException {
String clientPrincipal = properties.getProperty(CLIENT_PRINCIPAL);
String keytab = properties.getProperty(CLIENT_KEYTAB);
this.privilegedExecutor = FlumeAuthenticationUtil.getAuthenticator(clientPrincipal, keytab);
if(!privilegedExecutor.isAuthenticated()) {
if (!privilegedExecutor.isAuthenticated()) {
throw new FlumeException("Authentication failed in Kerberos mode for " +
"principal " + clientPrincipal + " keytab " + keytab);
"principal " + clientPrincipal + " keytab " + keytab);
}
}

Expand All @@ -78,31 +81,33 @@ protected TTransport getTransport(TSocket tsocket) throws Exception {
*/
public static class UgiSaslClientTransport extends TSaslClientTransport {
PrivilegedExecutor privilegedExecutor;

public UgiSaslClientTransport(String mechanism, String authorizationId,
String protocol, String serverName, Map<String, String> props,
CallbackHandler cbh, TTransport transport, PrivilegedExecutor privilegedExecutor) throws IOException {
super(mechanism, authorizationId, protocol, serverName, props, cbh,
transport);
CallbackHandler cbh, TTransport transport, PrivilegedExecutor privilegedExecutor)
throws IOException {
super(mechanism, authorizationId, protocol, serverName, props, cbh, transport);
this.privilegedExecutor = privilegedExecutor;
}

// open the SASL transport with using the current UserGroupInformation
// This is needed to get the current login context stored
/**
* Open the SASL transport with using the current UserGroupInformation.
* This is needed to get the current login context stored
*/
@Override
public void open() throws FlumeException {
try {
this.privilegedExecutor.execute(
new PrivilegedExceptionAction<Void>() {
public Void run() throws FlumeException {
// this is a workaround to using UgiSaslClientTransport.super.open()
// which results in IllegalAccessError
callSuperClassOpen();
return null;
}
});
new PrivilegedExceptionAction<Void>() {
public Void run() throws FlumeException {
// this is a workaround to using UgiSaslClientTransport.super.open()
// which results in IllegalAccessError
callSuperClassOpen();
return null;
}
});
} catch (InterruptedException e) {
throw new FlumeException(
"Interrupted while opening underlying transport", e);
throw new FlumeException("Interrupted while opening underlying transport", e);
} catch (Exception e) {
throw new FlumeException("Failed to open SASL transport", e);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,10 +50,10 @@ private FlumeAuthenticationUtil() {}
*
* @throws org.apache.flume.auth.SecurityException
*/
public synchronized static FlumeAuthenticator getAuthenticator(
public static synchronized FlumeAuthenticator getAuthenticator(
String principal, String keytab) throws SecurityException {

if(principal == null && keytab == null) {
if (principal == null && keytab == null) {
return SimpleAuthenticator.getSimpleAuthenticator();
}

Expand All @@ -62,7 +62,7 @@ public synchronized static FlumeAuthenticator getAuthenticator(
Preconditions.checkArgument(keytab != null,
"Keytab can not be null when Principal is provided");

if(kerbAuthenticator == null) {
if (kerbAuthenticator == null) {
kerbAuthenticator = new KerberosAuthenticator();
}
kerbAuthenticator.authenticate(principal, keytab);
Expand Down
Loading

0 comments on commit 2252fb1

Please sign in to comment.