> On 十月 12, 2016, 7:31 a.m., Guangya Liu wrote:
> > src/slave/containerizer/docker.cpp, lines 643-696
> > <https://reviews.apache.org/r/50841/diff/11/?file=1530439#file1530439line643>
> >
> >     I was thinking for how to make less code change but need to make sure 
> > build passed on mac.
> >     
> >     How about the following?
> >     
> >     ```
> >     Future<Nothing> DockerContainerizerProcess::allocateNvidiaGpus(
> >         const size_t count,
> >         const ContainerID& containerId)
> >     {
> >     #ifdef __linux__
> >       if (!nvidiaGpuAllocator.isSome()) {
> >         return Failure("The 'allocateNvidiaGpus' function was called"
> >                        " without an 'NvidiaGpuAllocator' set");
> >       }
> >     
> >       if (!containers_.contains(containerId)) {
> >         return Failure("Container is already destroyed");
> >       }
> >     
> >       return nvidiaGpuAllocator->allocate(count)
> >         .then(defer(
> >             self(),
> >             &Self::_allocateNvidiaGpus,
> >             lambda::_1,
> >             containerId));
> >     #else
> >       return Nothing();
> >     #endif
> >     }
> >     
> >     
> >     Future<Nothing> DockerContainerizerProcess::_allocateNvidiaGpus(
> >         const set<Gpu>& allocated,
> >         const ContainerID& containerId)
> >     {
> >     #ifdef __linux__
> >       if (!containers_.contains(containerId)) {
> >         return nvidiaGpuAllocator->deallocate(allocated)
> >           .onFailed([](const string& message) {
> >             return Failure("Failed to deallocate GPUs allocated"
> >                            " to destroyed container: " + message);
> >           });
> >       }
> >     
> >       containers_.at(containerId)->gpus = allocated;
> >     #endif
> >     
> >       return Nothing();
> >     }
> >     
> >     
> >     Future<Nothing> DockerContainerizerProcess::deallocateNvidiaGpus(
> >         const ContainerID& containerId)
> >     {
> >     #ifdef __linux__
> >       if (!nvidiaGpuAllocator.isSome()) {
> >         return Failure("The 'deallocateNvidiaGpus' function was called"
> >                        " without an 'NvidiaGpuAllocator' set");
> >       }
> >     
> >       return 
> > nvidiaGpuAllocator->deallocate(containers_.at(containerId)->gpus)
> >         .then(defer(
> >             self(),
> >             &Self::_deallocateNvidiaGpus,
> >             containerId));
> >     #else
> >       return Nothing();
> >     #endif
> >     }
> >     ```
> >     
> >     Then we need to update the comments of `allocateNvidiaGpus` and 
> > `deallocateNvidiaGpus` by identifying that those two APIs return Nothing if 
> > GPU is not enabled.

Fixed. Also added comments `// GPU is only supported on Linux, and it will 
return 'Nothing()' if the OS is not Linux.`


- Yubo


-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://reviews.apache.org/r/50841/#review152277
-----------------------------------------------------------


On 十月 11, 2016, 8:16 a.m., Yubo Li wrote:
> 
> -----------------------------------------------------------
> This is an automatically generated e-mail. To reply, visit:
> https://reviews.apache.org/r/50841/
> -----------------------------------------------------------
> 
> (Updated 十月 11, 2016, 8:16 a.m.)
> 
> 
> Review request for mesos, Benjamin Mahler, Guangya Liu, Kevin Klues, and 
> Rajat Phull.
> 
> 
> Bugs: MESOS-5795
>     https://issues.apache.org/jira/browse/MESOS-5795
> 
> 
> Repository: mesos
> 
> 
> Description
> -------
> 
> Added control logic to allocate/deallocate GPUs to GPU-related task
> when the task is started/terminated.
> 
> 
> Diffs
> -----
> 
>   src/slave/containerizer/docker.hpp 8da63101f951892e673612134770fc155d86112d 
>   src/slave/containerizer/docker.cpp 1d27761fcb3f310cf954d45ed41f4c89ecbd5982 
> 
> Diff: https://reviews.apache.org/r/50841/diff/
> 
> 
> Testing
> -------
> 
> make check
> 
> 
> Thanks,
> 
> Yubo Li
> 
>

Reply via email to