aboutsummaryrefslogtreecommitdiff
path: root/core
diff options
context:
space:
mode:
authorMridul Muralidharan <mridulm80@apache.org>2014-04-24 20:48:33 -0700
committerMatei Zaharia <matei@databricks.com>2014-04-24 20:48:33 -0700
commit968c0187a12f5ae4a696c02c1ff088e998ed7edd (patch)
treea08997fe5f5debfaae4b55770cee37d9d53c739c /core
parentd5c6ae6cc3305b9aa3185486b5b6ba0a6e5aca90 (diff)
downloadspark-968c0187a12f5ae4a696c02c1ff088e998ed7edd.tar.gz
spark-968c0187a12f5ae4a696c02c1ff088e998ed7edd.tar.bz2
spark-968c0187a12f5ae4a696c02c1ff088e998ed7edd.zip
SPARK-1586 Windows build fixes
Unfortunately, this is not exhaustive - particularly hive tests still fail due to path issues. Author: Mridul Muralidharan <mridulm80@apache.org> This patch had conflicts when merged, resolved by Committer: Matei Zaharia <matei@databricks.com> Closes #505 from mridulm/windows_fixes and squashes the following commits: ef12283 [Mridul Muralidharan] Move to org.apache.commons.lang3 for StringEscapeUtils. Earlier version was buggy appparently cdae406 [Mridul Muralidharan] Remove leaked changes from > 2G fix branch 3267f4b [Mridul Muralidharan] Fix build failures 35b277a [Mridul Muralidharan] Fix Scalastyle failures bc69d14 [Mridul Muralidharan] Change from hardcoded path separator 10c4d78 [Mridul Muralidharan] Use explicit encoding while using getBytes 1337abd [Mridul Muralidharan] fix classpath while running in windows
Diffstat (limited to 'core')
-rw-r--r--core/src/main/scala/org/apache/spark/SparkSaslClient.scala6
-rw-r--r--core/src/main/scala/org/apache/spark/SparkSaslServer.scala8
-rw-r--r--core/src/main/scala/org/apache/spark/api/python/PythonRDD.scala2
-rw-r--r--core/src/main/scala/org/apache/spark/network/ReceiverTest.scala2
-rw-r--r--core/src/main/scala/org/apache/spark/network/SenderTest.scala2
-rw-r--r--core/src/main/scala/org/apache/spark/rdd/PipedRDD.scala8
-rw-r--r--core/src/main/scala/org/apache/spark/util/Utils.scala24
-rw-r--r--core/src/test/java/org/apache/spark/JavaAPISuite.java4
8 files changed, 34 insertions, 22 deletions
diff --git a/core/src/main/scala/org/apache/spark/SparkSaslClient.scala b/core/src/main/scala/org/apache/spark/SparkSaslClient.scala
index 5b14c4291d..65003b6ac6 100644
--- a/core/src/main/scala/org/apache/spark/SparkSaslClient.scala
+++ b/core/src/main/scala/org/apache/spark/SparkSaslClient.scala
@@ -111,10 +111,10 @@ private[spark] class SparkSaslClient(securityMgr: SecurityManager) extends Logg
CallbackHandler {
private val userName: String =
- SparkSaslServer.encodeIdentifier(securityMgr.getSaslUser().getBytes())
+ SparkSaslServer.encodeIdentifier(securityMgr.getSaslUser().getBytes("utf-8"))
private val secretKey = securityMgr.getSecretKey()
- private val userPassword: Array[Char] =
- SparkSaslServer.encodePassword(if (secretKey != null) secretKey.getBytes() else "".getBytes())
+ private val userPassword: Array[Char] = SparkSaslServer.encodePassword(
+ if (secretKey != null) secretKey.getBytes("utf-8") else "".getBytes("utf-8"))
/**
* Implementation used to respond to SASL request from the server.
diff --git a/core/src/main/scala/org/apache/spark/SparkSaslServer.scala b/core/src/main/scala/org/apache/spark/SparkSaslServer.scala
index 6161a6fb7a..f6b0a9132a 100644
--- a/core/src/main/scala/org/apache/spark/SparkSaslServer.scala
+++ b/core/src/main/scala/org/apache/spark/SparkSaslServer.scala
@@ -89,7 +89,7 @@ private[spark] class SparkSaslServer(securityMgr: SecurityManager) extends Loggi
extends CallbackHandler {
private val userName: String =
- SparkSaslServer.encodeIdentifier(securityMgr.getSaslUser().getBytes())
+ SparkSaslServer.encodeIdentifier(securityMgr.getSaslUser().getBytes("utf-8"))
override def handle(callbacks: Array[Callback]) {
logDebug("In the sasl server callback handler")
@@ -101,7 +101,7 @@ private[spark] class SparkSaslServer(securityMgr: SecurityManager) extends Loggi
case pc: PasswordCallback => {
logDebug("handle: SASL server callback: setting userPassword")
val password: Array[Char] =
- SparkSaslServer.encodePassword(securityMgr.getSecretKey().getBytes())
+ SparkSaslServer.encodePassword(securityMgr.getSecretKey().getBytes("utf-8"))
pc.setPassword(password)
}
case rc: RealmCallback => {
@@ -159,7 +159,7 @@ private[spark] object SparkSaslServer {
* @return Base64-encoded string
*/
def encodeIdentifier(identifier: Array[Byte]): String = {
- new String(Base64.encodeBase64(identifier))
+ new String(Base64.encodeBase64(identifier), "utf-8")
}
/**
@@ -168,7 +168,7 @@ private[spark] object SparkSaslServer {
* @return password as a char array.
*/
def encodePassword(password: Array[Byte]): Array[Char] = {
- new String(Base64.encodeBase64(password)).toCharArray()
+ new String(Base64.encodeBase64(password), "utf-8").toCharArray()
}
}
diff --git a/core/src/main/scala/org/apache/spark/api/python/PythonRDD.scala b/core/src/main/scala/org/apache/spark/api/python/PythonRDD.scala
index 1498b017a7..672c344a56 100644
--- a/core/src/main/scala/org/apache/spark/api/python/PythonRDD.scala
+++ b/core/src/main/scala/org/apache/spark/api/python/PythonRDD.scala
@@ -187,7 +187,7 @@ private[spark] class PythonRDD[T: ClassTag](
val exLength = stream.readInt()
val obj = new Array[Byte](exLength)
stream.readFully(obj)
- throw new PythonException(new String(obj), readerException)
+ throw new PythonException(new String(obj, "utf-8"), readerException)
case SpecialLengths.END_OF_DATA_SECTION =>
// We've finished the data section of the output, but we can still
// read some accumulator updates:
diff --git a/core/src/main/scala/org/apache/spark/network/ReceiverTest.scala b/core/src/main/scala/org/apache/spark/network/ReceiverTest.scala
index 9dc51e0d40..53a6038a9b 100644
--- a/core/src/main/scala/org/apache/spark/network/ReceiverTest.scala
+++ b/core/src/main/scala/org/apache/spark/network/ReceiverTest.scala
@@ -28,7 +28,7 @@ private[spark] object ReceiverTest {
manager.onReceiveMessage((msg: Message, id: ConnectionManagerId) => {
/* println("Received [" + msg + "] from [" + id + "] at " + System.currentTimeMillis) */
- val buffer = ByteBuffer.wrap("response".getBytes)
+ val buffer = ByteBuffer.wrap("response".getBytes("utf-8"))
Some(Message.createBufferMessage(buffer, msg.id))
})
Thread.currentThread.join()
diff --git a/core/src/main/scala/org/apache/spark/network/SenderTest.scala b/core/src/main/scala/org/apache/spark/network/SenderTest.scala
index 14c094c617..b8ea7c2cff 100644
--- a/core/src/main/scala/org/apache/spark/network/SenderTest.scala
+++ b/core/src/main/scala/org/apache/spark/network/SenderTest.scala
@@ -54,7 +54,7 @@ private[spark] object SenderTest {
val responseStr = manager.sendMessageReliablySync(targetConnectionManagerId, dataMessage)
.map { response =>
val buffer = response.asInstanceOf[BufferMessage].buffers(0)
- new String(buffer.array)
+ new String(buffer.array, "utf-8")
}.getOrElse("none")
val finishTime = System.currentTimeMillis
diff --git a/core/src/main/scala/org/apache/spark/rdd/PipedRDD.scala b/core/src/main/scala/org/apache/spark/rdd/PipedRDD.scala
index e441d4a40c..5d77d37378 100644
--- a/core/src/main/scala/org/apache/spark/rdd/PipedRDD.scala
+++ b/core/src/main/scala/org/apache/spark/rdd/PipedRDD.scala
@@ -87,10 +87,10 @@ private[spark] class PipedRDD[T: ClassTag](
// When spark.worker.separated.working.directory option is turned on, each
// task will be run in separate directory. This should be resolve file
// access conflict issue
- val taskDirectory = "./tasks/" + java.util.UUID.randomUUID.toString
+ val taskDirectory = "tasks" + File.separator + java.util.UUID.randomUUID.toString
var workInTaskDirectory = false
logDebug("taskDirectory = " + taskDirectory)
- if (separateWorkingDir == true) {
+ if (separateWorkingDir) {
val currentDir = new File(".")
logDebug("currentDir = " + currentDir.getAbsolutePath())
val taskDirFile = new File(taskDirectory)
@@ -106,13 +106,13 @@ private[spark] class PipedRDD[T: ClassTag](
for (file <- currentDir.list(tasksDirFilter)) {
val fileWithDir = new File(currentDir, file)
Utils.symlink(new File(fileWithDir.getAbsolutePath()),
- new File(taskDirectory + "/" + fileWithDir.getName()))
+ new File(taskDirectory + File.separator + fileWithDir.getName()))
}
pb.directory(taskDirFile)
workInTaskDirectory = true
} catch {
case e: Exception => logError("Unable to setup task working directory: " + e.getMessage +
- " (" + taskDirectory + ")")
+ " (" + taskDirectory + ")", e)
}
}
diff --git a/core/src/main/scala/org/apache/spark/util/Utils.scala b/core/src/main/scala/org/apache/spark/util/Utils.scala
index 084a71c4ca..8351f7156a 100644
--- a/core/src/main/scala/org/apache/spark/util/Utils.scala
+++ b/core/src/main/scala/org/apache/spark/util/Utils.scala
@@ -30,6 +30,7 @@ import scala.io.Source
import scala.reflect.ClassTag
import com.google.common.io.Files
+import org.apache.commons.lang.SystemUtils
import com.google.common.util.concurrent.ThreadFactoryBuilder
import org.apache.hadoop.fs.{FileSystem, FileUtil, Path}
import org.json4s._
@@ -45,10 +46,13 @@ import org.apache.spark.serializer.{DeserializationStream, SerializationStream,
*/
private[spark] object Utils extends Logging {
- val osName = System.getProperty("os.name")
-
val random = new Random()
+ def sparkBin(sparkHome: String, which: String): File = {
+ val suffix = if (SystemUtils.IS_OS_WINDOWS) ".cmd" else ""
+ new File(sparkHome + File.separator + "bin", which + suffix)
+ }
+
/** Serialize an object using Java serialization */
def serialize[T](o: T): Array[Byte] = {
val bos = new ByteArrayOutputStream()
@@ -605,7 +609,7 @@ private[spark] object Utils extends Logging {
*/
def isSymlink(file: File): Boolean = {
if (file == null) throw new NullPointerException("File must not be null")
- if (osName.startsWith("Windows")) return false
+ if (SystemUtils.IS_OS_WINDOWS) return false
val fileInCanonicalDir = if (file.getParent() == null) {
file
} else {
@@ -1008,10 +1012,18 @@ private[spark] object Utils extends Logging {
if (dst.isAbsolute()) {
throw new IOException("Destination must be relative")
}
- val linkCmd = if (osName.startsWith("Windows")) "copy" else "ln -sf"
+ var cmdSuffix = ""
+ val linkCmd = if (SystemUtils.IS_OS_WINDOWS) {
+ // refer to http://technet.microsoft.com/en-us/library/cc771254.aspx
+ cmdSuffix = " /s /e /k /h /y /i"
+ "cmd /c xcopy "
+ } else {
+ cmdSuffix = ""
+ "ln -sf "
+ }
import scala.sys.process._
- (linkCmd + " " + src.getAbsolutePath() + " " + dst.getPath()) lines_! ProcessLogger(line =>
- (logInfo(line)))
+ (linkCmd + src.getAbsolutePath() + " " + dst.getPath() + cmdSuffix) lines_!
+ ProcessLogger(line => (logInfo(line)))
}
diff --git a/core/src/test/java/org/apache/spark/JavaAPISuite.java b/core/src/test/java/org/apache/spark/JavaAPISuite.java
index 8d2e9f1846..76c6f5af82 100644
--- a/core/src/test/java/org/apache/spark/JavaAPISuite.java
+++ b/core/src/test/java/org/apache/spark/JavaAPISuite.java
@@ -610,8 +610,8 @@ public class JavaAPISuite implements Serializable {
@Test
public void wholeTextFiles() throws IOException {
- byte[] content1 = "spark is easy to use.\n".getBytes();
- byte[] content2 = "spark is also easy to use.\n".getBytes();
+ byte[] content1 = "spark is easy to use.\n".getBytes("utf-8");
+ byte[] content2 = "spark is also easy to use.\n".getBytes("utf-8");
File tempDir = Files.createTempDir();
String tempDirName = tempDir.getAbsolutePath();