On paternity leave, so I don't get to these emails right away...

> -----Original Message-----
> From: Chiradeep Vittal [mailto:chiradeep.vit...@citrix.com]
> Sent: 20 September 2013 06:40
> To: dev@cloudstack.apache.org
> Subject: Re: [Merge] Minimal Hyper-V Plugin
> 
> Thanks for the preliminary testing.
> Questions:
> 1. More for the community: should the C# code be in a separate repo?
> According to the merge request, mono and maven can be used to build the
> agent.

Silence == acceptance?

> 2. Packaging: how is the C# agent installed?

The agent is implemented to as a self-contained Windows Service, which is the 
Microsoft Windows equivalent of a Linux daemon.

To make the agent distributable, package the agent and an app.config consistent 
with your data center in an MSI.  WiX is the preferred tool 
(http://en.wikipedia.org/wiki/WiX ).  When executed, the MSI will add the agent 
to set of Windows Services.

To distribute and run this MSI, use Active Directory's GPO (global policy 
object) service.  In typical deployments machines running Hyper-V will be 
domain joined.  Where machines are not domain joined, look at something like 
puppet. 

> 3. What does minimal mean? What works? What doesn't? Local storage?
> Shared storage? Networking modes? Are the hypervisors supposed to be
> clustered?

Minimal = create / start / stop / destroy a local storage VM in a QuickCloud 
network offering and CIFS secondary storage.

No clustering required.

> 4. How does one extend the "minimal" plugin?

Each CloudStack command has a corresponding an HTTP URI served by the agent.  
These are written in ASP.NET MVC4.  Data received by the agent is kept in a 
JSON object graph.  

E.g.

        // POST api/HypervResource/ReadyCommand
        [HttpPost]
        [ActionName(CloudStackTypes.ReadyCommand)]
        public JContainer ReadyCommand([FromBody]dynamic cmd)
        {
            using (log4net.NDC.Push(Guid.NewGuid().ToString()))
            {
                logger.Info(CloudStackTypes.ReadyCommand + cmd.ToString());
                object ansContent = new
                {
                    result = true,
                    details = (string)null
                };
                return ReturnCloudStackTypedJArray(ansContent, 
CloudStackTypes.ReadyAnswer);
            }

        }

Therefore, to extend the plugin, add new HTTP URIs corresponding to missing 
commands, or extend the capabilities of existing commands.

I can follow up with an explanation in a blog entry.

> 5. Can the unit tests (at least those that test the agent API) be run in a 
> non-
> hyper-v environment?

Unit tests start the agent in a local process.  Provided Mono is installed on 
your system, the unit tests will run.  However, they will complain of bad 
output.

> 6. Is the RDP console you had earlier mentioned included in the merge?

Yes, but it serves no purpose at the moment.  

If there is an IP clearance protocol to follow for this console, I would prefer 
to remove the console from the submission.

> 7. Any known issues?
> 

There seems to be a bug with local paths that include spaces.  I've asked 
Rajesh to provide a bug report, but it's unclear where to put this.  Can we use 
JIRA for code not merged, or should the bug appear in the comments.

 
> On 9/11/13 8:00 AM, "Donal Lafferty" <donal.laffe...@citrix.com> wrote:
> 
> >Hi Rajesh,
> >
> >Thanks for spotting this problem with the Hyper-V Agent.  Sounds like
> >it should first URL decode the field.
> >
> >Can you update the review with details of your testing?
> >
> >I would need to know the command and which incoming field is causing
> >problems.  Also, can you add a serialised example of the instruction
> >that fails?  There should be an example in the agent's log file.  By
> >default, the log file is in the same folder as the agent executable.  I
> >will use this to update the automated tests.
> >
> >If you want to go ahead and made the fixes from a git clone, send a
> >Pull Request.  As long as there is an appropriate automated test, I'll
> >update the feature branch with your changes.
> >
> >
> >DL
> >
> >> -----Original Message-----
> >> From: Rajesh Battala [mailto:rajesh.batt...@citrix.com]
> >> Sent: 11 September 2013 09:08
> >> To: dev@cloudstack.apache.org
> >> Subject: RE: [Merge] Minimal Hyper-V Plugin
> >>
> >> 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$Interce
> >> p
> >> >
> torDispatcher.intercept(ComponentInstantiationPostProcessor.java:125)
> >> >         at
> >> > com.cloud.storage.LocalStoragePoolListener.processConnect(LocalStor
> >> > age
> >> > 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(ThreadPoolExecuto
> >> > r.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.CloudStackPrimary
> >> > Dat
> >> > aSto
> >> >
> >>
> >>reLifeCycleImpl.initialize(CloudStackPrimaryDataStoreLifeCycleImpl.jav
> >>a:3
> >>49)
> >> >         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