Selenium grid parallel execution fails to run on multiple android devices

import java.io.File;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.List;
import java.util.concurrent.TimeUnit;

import org.openqa.selenium.remote.CapabilityType;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.testng.Assert;
import org.testng.annotations.AfterTest;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Parameters;
import org.testng.annotations.Test;

import io.appium.java_client.AppiumDriver;
import io.appium.java_client.MobileElement;
import io.appium.java_client.android.AndroidDriver;
import io.appium.java_client.android.AndroidElement;
import io.appium.java_client.remote.MobileCapabilityType;

public class Calling2 {

public  AndroidDriver<AndroidElement> dr;

public static DesiredCapabilities cap;

@BeforeTest(alwaysRun=true)    
@Parameters({"device","port"})
public void testsetup(String device, String port) throws MalformedURLException, InterruptedException
{			
		
	String path ="C://....//app-release-23.apk";
	File app = new File(path);
	 cap = new DesiredCapabilities().android();
	
	cap.setCapability(MobileCapabilityType.PLATFORM_NAME, "Android");
	
	cap.setCapability(MobileCapabilityType.PLATFORM_VERSION, "6.0.1");
	
	cap.setCapability(MobileCapabilityType.DEVICE_NAME, device);
			
	cap.setCapability(MobileCapabilityType.APP, app);
			
	dr = new AndroidDriver<AndroidElement>(new URL("http://x.x.x.x:"+port+"/wd/hub"), cap);
	
}

@Test            
public void f() {            

}      
      	
@AfterTest
public void quit(){
	dr.quit();
}	

}

JSON FILE:

{
“capabilities”:
[
{
“browserName”: “Android”,
“version”:“6.0.1”,
“maxInstances”:1,
“platform”:“ANDROID”,
“deviceName”:“03157df388c”
}],

"configuration":

{
“deviceName”:“03157df388c”,
“nodeTimeout”:120,
“port”:4735,
“hubPort”:4444,
“proxy”: “org.openqa.grid.selenium.proxy.DefaultRemoteProxy”,
“url”:“http://x.x.x.x:4735/wd/hub”,
“hub”: “http://x.x.x.x:4444/grid/register”,
“hubHost”:“x.x.x.x”,
“nodePolling”:2000,
“registerCycle”:10000,
“register”:true,
“cleanUpCycle”:2000,
“timeout”:30000,
“maxSession”:1
}
}

TESTNG.XML FILE:

<tests>

	<test name="run on device 1">
		<classes>	
			<parameter name="device" value="03157df388c"></parameter>
			<parameter name="port" value="4735"></parameter>  
			<parameter name="bp" value="4728"></parameter>
			<class name="Calling2">
			</class>
		</classes>
	</test>

	<sleep seconds="2"/>
	<test name="run on device 2">
		<classes>	
			<parameter name="device" value="ce776SS"></parameter>
			<parameter name="port" value="4725"></parameter> 
			<parameter name="bp" value="4732"></parameter>
			<class name="Calling2">
			</class>
		</classes>
	</test>
	
</tests>

SERVER COMMANDS:

java -jar selenium-server-standalone-2.48.2.jar -role hub http://X.X.X.X:4444/grid/console

appium -a X.X.X.X -p 4735 --bootstrap-port 4728 -U 03157df388c --nodeconfig C:\Users\nodeconfigmobile_1.json

appium -a X.X.X.X -p 4725 --bootstrap-port 4732 -U ce7760SS --nodeconfig C:\Users\nodeconfigmobile_2.json

ERROR I AM GETTING:

org.openqa.selenium.SessionNotCreatedException: A new session could not be created. (Original error: EPERM: operation not permitted, rename ‘C:\Users\AppData\Local\Temp\116111-5852-185qqii\appium.tmp’ -> ‘C:\app-release-23.apk’) (WARNING: The server did not provide any stacktrace information)
Command duration or timeout: 9.67 seconds
Build info: version: ‘2.48.2’, revision: ‘41bccdd’, time: ‘2015-10-09 19:55:52’
System info: host: ‘SSS-Pc’, ip: ‘X.X.X.X’, os.name: ‘Windows 7’, os.arch: ‘amd64’, os.version: ‘6.1’, java.version: ‘1.8.0_111’
Driver info: io.appium.java_client.android.AndroidDriver
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
at java.lang.reflect.Constructor.newInstance(Unknown Source)
at org.openqa.selenium.remote.ErrorHandler.createThrowable(ErrorHandler.java:206)
at org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:158)
at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:647)
at io.appium.java_client.DefaultGenericMobileDriver.execute(DefaultGenericMobileDriver.java:51)
at io.appium.java_client.AppiumDriver.execute(AppiumDriver.java:1)
at io.appium.java_client.android.AndroidDriver.execute(AndroidDriver.java:1)
at org.openqa.selenium.remote.RemoteWebDriver.startSession(RemoteWebDriver.java:247)
at org.openqa.selenium.remote.RemoteWebDriver.(RemoteWebDriver.java:129)
at org.openqa.selenium.remote.RemoteWebDriver.(RemoteWebDriver.java:142)
at io.appium.java_client.DefaultGenericMobileDriver.(DefaultGenericMobileDriver.java:47)
at io.appium.java_client.AppiumDriver.(AppiumDriver.java:114)
at io.appium.java_client.AppiumDriver.(AppiumDriver.java:132)
at io.appium.java_client.android.AndroidDriver.(AndroidDriver.java:97)
at Calling2.testsetup(Calling2.java:64)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:86)
at org.testng.internal.Invoker.invokeConfigurationMethod(Invoker.java:514)
at org.testng.internal.Invoker.invokeConfigurations(Invoker.java:215)
at org.testng.internal.Invoker.invokeConfigurations(Invoker.java:142)
at org.testng.TestRunner.beforeRun(TestRunner.java:656)
at org.testng.TestRunner.run(TestRunner.java:624)
at org.testng.SuiteRunner.runTest(SuiteRunner.java:366)
at org.testng.SuiteRunner.access$000(SuiteRunner.java:39)
at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:400)
at org.testng.internal.thread.ThreadUtil$2.call(ThreadUtil.java:64)
at java.util.concurrent.FutureTask.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)

Looks like permission issue, I guess you would get same error with single device nothing to do with grid.

How can I give permissions, can you explain in more detail.

Appium is not allowed to rename 'C:\Users\AppData\Local\Temp\XXXXXX, try changing the Access permission for your Temp folder, should be read and write for all.

I have verified all the permission are checked. Could you have a look.