Hi Donal, 
I had figured out the issue why "+" is coming in the path value. 
The root cause is while encoding the URI, we use URLEncoder.encode(path) 

The encode method is converting/replace "space" with "+".

API doc:
When encoding a String, the following rules apply:

The alphanumeric characters "a" through "z", "A" through "Z" and "0" through 
"9" remain the same.
The special characters ".", "-", "*", and "_" remain the same.
The space character " " is converted into a plus sign "+".
All other characters are unsafe and are first converted into one or more bytes 
using some encoding scheme. Then each byte is represented by the 3-character 
string "%xy", where xy is the two-digit hexadecimal representation of the byte. 
The recommended encoding scheme to use is UTF-8. However, for compatibility 
reasons, if an encoding is not specified, then the default encoding of the 
platform is used.

Thanks
Rajesh Battala




-----Original Message-----
From: Donal Lafferty [mailto:donal.laffe...@citrix.com] 
Sent: Monday, September 2, 2013 3:03 PM
To: dev@cloudstack.apache.org
Subject: RE: [Merge] Minimal Hyper-V Plugin

Hi Rajesh,

I'll PM the scripts.

WRT problem below, it looks like a CS persists paths with spaces as URL encoded 
strings.  Is it the Hyper-V code storing the path in the wrong formant?  I can 
fix that if it's an issue.

I would be very reluctant to change the the format of columns in the database. 
There will be other code reliant on URL encoding.

DL


> -----Original Message-----
> From: Rajesh Battala [mailto:rajesh.batt...@citrix.com]
> Sent: 02 September 2013 08:37
> To: dev@cloudstack.apache.org
> Subject: RE: [Merge] Minimal Hyper-V Plugin
> 
> Hi Donal,
> One more issue is, currently local storage is discovered when host is added.
> But when mgmt. server got restarted,  there is an exception happening 
> while add/discovering already existing local storage pool.
> 
> 
> Root cause:
> ==========
> I had debugged and figured out the root cause,  CS not able to find 
> the storage pool and tries to created it but it fails to add to DB as 
> the entry is already persisted.
> The reason why CS not able to get the existing localstorage is , when 
> executing the query to get the storage pool, it's getting empty set . 
> It's because of the storage path issue.
> In the db the local storage path is stored as 
> "C:\Users\Public\Documents\Hyper-V\Virtual+Hard+Disks",  ('+' symbol 
> in place of space) In the db query its searching without "+" and with 
> space which is causing the query to have empty set and hence the 
> issue.
> 
> I can fix the issue by removing the "+" when we are persisting the 
> local storage pool from hyperv
> 
> 
> 
> Exception:
> =========
> WARN  [c.c.r.ResourceManagerImpl] (AgentTaskPool-14:ctx-ddbbf089) 
> Unable to connect due to
> com.cloud.exception.ConnectionException: Unable to setup the local 
> storage pool for Host[-1-Routing]
>         at
> com.cloud.storage.StorageManagerImpl.createLocalStorage(StorageManage
> rImpl.java:598)
>         at
> com.cloud.utils.component.ComponentInstantiationPostProcessor$Intercep
> torDispatcher.intercept(ComponentInstantiationPostProcessor.java:125)
>         at
> com.cloud.storage.LocalStoragePoolListener.processConnect(LocalStorage
> Po
> olListener.java:86)
>         at
> com.cloud.agent.manager.AgentManagerImpl.notifyMonitorsOfConnection(
> AgentManagerImpl.java:519)
>         at
> com.cloud.agent.manager.AgentManagerImpl.handleDirectConnectAgent(A
> gentManagerImpl.java:1414)
>         at
> com.cloud.resource.ResourceManagerImpl.createHostAndAgent(Resource
> ManagerImpl.java:1760)
>         at
> com.cloud.resource.ResourceManagerImpl.createHostAndAgent(Resource
> ManagerImpl.java:1922)
>         at
> com.cloud.agent.manager.AgentManagerImpl$SimulateStartTask.run(Agent
> ManagerImpl.java:1063)
>         at
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.j
> av
> a:1110)
>         at
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.
> ja
> va:603)
>         at java.lang.Thread.run(Thread.java:722)
> Caused by: com.cloud.utils.exception.CloudRuntimeException: duplicate
> uuid: 35aa91ba-c95b-3fc4-91df-9c95dc31b350-HypervResource
>         at
> org.apache.cloudstack.storage.volume.datastore.PrimaryDataStoreHelper.
> cr
> eatePrimaryDataStore(PrimaryDataStoreHelper.java:66)
>         at
> org.apache.cloudstack.storage.datastore.lifecycle.CloudStackPrimaryDat
> aSto
> reLifeCycleImpl.initialize(CloudStackPrimaryDataStoreLifeCycleImpl.java:349)
>         at
> com.cloud.storage.StorageManagerImpl.createLocalStorage(StorageManage
> rImpl.java:589)
>         ... 14 more
> 
> 
> 
> -----Original Message-----
> From: Donal Lafferty [mailto:donal.laffe...@citrix.com]
> Sent: Saturday, August 31, 2013 5:19 AM
> To: dev@cloudstack.apache.org
> Subject: [Merge] Minimal Hyper-V Plugin
> 
> A plugin for Hyper-V control is available for CloudStack.  The plugin 
> implements basic VM control;  however, its architecture allows 
> additional functionality to be easily added.  Incorporating the plugin 
> in CloudStack will allow the community to participate in improving the 
> features available with Hyper-V.
> 
> The plugin uses a Director Connect Agent architecture described here:
> https://cwiki.apache.org/confluence/display/CLOUDSTACK/Progress
> 
> This links provides details of third party libraries used by the 
> plugin including their licenses.  No source for these libraries is 
> used, and the binaries are downloaded from their distributors at build time.
> 
> No proprietary tools are required for the build.  For instance, C# 
> compiled with Mono has been tested.  Therefore, the plugin has been 
> added to the default build and the default deployment.
> 
> The plugin includes unit and functional tests that can be triggered at 
> build time.  See the link above for details.
> 
> The Apache header is applied to source and where feasible to build 
> config files.
> 
> The source is the 
> https://github.com/lafferty/cloudstack/tree/hyperv_plugin
> 
> Finally, the review request is at https://reviews.apache.org/r/13922/
> 
> Testing?
> 
> Integration test:  created zone with CIFS secondary storage, added 
> Hyper-V host, registered templates, create/stop/start/destroy VM.  
> Scripts for zone setup are available on request.
> 
> Functional & unit tests:  the Java versions are part of the build.  
> The C# versions were run inside Visual Studio's Test Explorer.

Reply via email to