[
https://issues.apache.org/jira/browse/MESOS-10219?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17364775#comment-17364775
]
acecile5555555 commented on MESOS-10219:
----------------------------------------
Hello [~cf.natali]
Actually I initially had the same feeling but it's expected.
Look at this file, it's the POSIX FS isolator but it's actually using
stout-wrapped os calls to make them portable:
https://github.com/apache/mesos/blob/master/src/slave/containerizer/mesos/isolators/filesystem/posix.cpp
The windows emulator actually inherits from the POSIX one:
https://github.com/apache/mesos/blob/master/src/slave/containerizer/mesos/isolators/filesystem/windows.cpp
And the whole mesos-slave agent is working perfectly fine on Windows, until the
main directory exceeds 250 chars (can be tested easily using Marathon and
nested groups).
You're absolutely right, the error is raised by Windows agent on Windows, only
if the path is long, otherwise it's working fine, so it's definitely going
through this code.
If you look into the POSIX isolator you'll see stat is the only os call which
is not going through stout to have a windows version, and sadly I did not find
anything in stout so I think it's not implemented.
So far I've modified the code this way:
{noformat}
--- a/src/slave/containerizer/mesos/isolators/filesystem/posix.cpp
+++ b/src/slave/containerizer/mesos/isolators/filesystem/posix.cpp
@@ -23,6 +23,7 @@
#include <stout/fs.hpp>
#include <stout/os.hpp>
#include <stout/path.hpp>
+#include <stout/internal/windows/longpath.hpp>
#include <stout/os/realpath.hpp>
@@ -148,6 +149,7 @@ Future<Nothing> PosixFilesystemIsolatorProcess::update(
// container paths for volumes. This is enforced by the master. For
// those volumes, we create symlinks in the executor directory.
Resources current = info->resources;
+ const std::string directoryPath = info->directory;
// We first remove unneeded persistent volumes.
foreach (const Resource& resource, current.persistentVolumes()) {
@@ -168,7 +170,7 @@ Future<Nothing> PosixFilesystemIsolatorProcess::update(
continue;
}
- string link = path::join(info->directory, containerPath);
+ string link = path::join(directoryPath, containerPath);
LOG(INFO) << "Removing symlink '" << link << "' for persistent volume "
<< resource << " of container " << containerId;
@@ -183,7 +185,7 @@ Future<Nothing> PosixFilesystemIsolatorProcess::update(
// Get user and group info for this task based on the task's sandbox.
struct stat s;
- if (::stat(info->directory.c_str(), &s) < 0) {
+ if (::stat(directoryPath.c_str(), &s) < 0) {
return Failure("Failed to get ownership for '" + info->directory +
"': " + os::strerror(errno));
}
{noformat}
It's seems to be building so I assume info->directory does return a string.
My next move is to pass directoryPath to stout/internal/windows/longpath to
convert it to long path, but if I recall correctly last time I tried this I
ended up with casting issue when passing the longpath variable to ::stat
Thanks a lot for your help offer, that would help a lot
> 1.11.0 does not build on Windows
> --------------------------------
>
> Key: MESOS-10219
> URL: https://issues.apache.org/jira/browse/MESOS-10219
> Project: Mesos
> Issue Type: Bug
> Components: agent, build, cmake
> Affects Versions: 1.11.0
> Reporter: acecile5555555
> Priority: Major
> Attachments: patch_1.10.0_windows_build.diff
>
>
> Hello,
>
> I just tried building Mesos 1.11.0 on Windows and this is not working.
>
> The first issue is libarchive compilation that can be easily workarounded by
> adding the following hunk to 3rdparty/libarchive-3.3.2.patch:
> {noformat}
> --- a/CMakeLists.txt
> +++ b/CMakeLists.txt
> @@ -137,7 +137,7 @@
> # This is added into CMAKE_C_FLAGS when CMAKE_BUILD_TYPE is "Debug"
> # Enable level 4 C4061: The enumerate has no associated handler in a switch
> # statement.
> - SET(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} /we4061")
> + #SET(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} /we4061")
> # Enable level 4 C4254: A larger bit field was assigned to a smaller bit
> # field.
> SET(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} /we4254")
> {noformat}
> Sadly it is failing later with issue I cannot solve myself:
> {noformat}
> C:\Users\earthlab\mesos\src\csi/state.hpp(22,10): fatal error C1083: Cannot
> open include file: 'csi/state.pb.h': No such file or directory (compiling
> source file C:\Users\earthlab\mesos\src\slave\csi_server.cpp)
> [C:\Users\earthlab\mesos\build\src\mesos.vcxproj]
> qos_controller.cpp
> resource_estimator.cpp
> slave.cpp
> state.cpp
> task_status_update_manager.cpp
> sandbox.cpp
> C:\Users\earthlab\mesos\src\csi/state.hpp(22,10): fatal error C1083: Cannot
> open include file: 'csi/state.pb.h': No such file or directory (compiling
> source file C:\Users\earthlab\mesos\src\slave\slave.cpp)
> [C:\Users\earthlab\mesos\build\src\mesos.vcxproj]
> composing.cpp
> isolator.cpp
> C:\Users\earthlab\mesos\src\csi/state.hpp(22,10): fatal error C1083: Cannot
> open include file: 'csi/state.pb.h': No such file or directory (compiling
> source file C:\Users\earthlab\mesos\src\slave\task_status_update_manager.cpp)
> [C:\Users\earthlab\mesos\build\src\mesos.vcxproj]
> isolator_tracker.cpp
> launch.cpp
> C:\Users\earthlab\mesos\src\csi/state.hpp(22,10): fatal error C1083: Cannot
> open include file: 'csi/state.pb.h': No such file or directory (compiling
> source file C:\Users\earthlab\mesos\src\slave\containerizer\composing.cpp)
> [C:\Users\earthlab\mesos\build\src\mesos.vcxproj]
> launcher.cpp
> C:\Users\earthlab\mesos\src\slave\containerizer\mesos\launch.cpp(524,34):
> error C2668: 'os::spawn': ambiguous call to overloaded function
> [C:\Users\earthlab\mesos\build\src\mesos.vcxproj]
> C:\Users\earthlab\mesos\3rdparty\stout\include\stout/os/exec.hpp(52,20):
> message : could be 'Option<T> os::spawn(const std::string &,const
> std::vector<std::string,std::allocator<std::string>> &)'
> [C:\Users\earthlab\mesos\build\src\mesos.vcxproj]
> with
> [
> T=int
> ] (compiling source file
> C:\Users\earthlab\mesos\src\slave\containerizer\mesos\launch.cpp)
> C:\Users\earthlab\mesos\3rdparty\stout\include\stout/os/windows/exec.hpp(412,20):
> message : or 'Option<T> os::spawn(const std::string &,const
> std::vector<std::string,std::allocator<std::string>> &,const
> Option<std::map<std::string,std::string,std::less<std::string>,std::allocator<std::pair<const
> std::string,std::string>>>> &)'
> [C:\Users\earthlab\mesos\build\src\mesos.vcxproj]
> with
> [
> T=int
> ] (compiling source file
> C:\Users\earthlab\mesos\src\slave\containerizer\mesos\launch.cpp)
> C:\Users\earthlab\mesos\src\slave\containerizer\mesos\launch.cpp(525,75):
> message : while trying to match the argument list '(const char [3],
> initializer list)' [C:\Users\earthlab\mesos\build\src\mesos.vcxproj]
> C:\Users\earthlab\mesos\src\slave\containerizer\mesos\launch.cpp(893,47):
> error C2668: 'os::spawn': ambiguous call to overloaded function
> [C:\Users\earthlab\mesos\build\src\mesos.vcxproj]
> C:\Users\earthlab\mesos\3rdparty\stout\include\stout/os/exec.hpp(52,20):
> message : could be 'Option<T> os::spawn(const std::string &,const
> std::vector<std::string,std::allocator<std::string>> &)'
> [C:\Users\earthlab\mesos\build\src\mesos.vcxproj]
> with
> [
> T=int
> ] (compiling source file
> C:\Users\earthlab\mesos\src\slave\containerizer\mesos\launch.cpp)
> C:\Users\earthlab\mesos\3rdparty\stout\include\stout/os/windows/exec.hpp(412,20):
> message : or 'Option<T> os::spawn(const std::string &,const
> std::vector<std::string,std::allocator<std::string>> &,const
> Option<std::map<std::string,std::string,std::less<std::string>,std::allocator<std::pair<const
> std::string,std::string>>>> &)'
> [C:\Users\earthlab\mesos\build\src\mesos.vcxproj]
> with
> [
> T=int
> ] (compiling source file
> C:\Users\earthlab\mesos\src\slave\containerizer\mesos\launch.cpp)
> C:\Users\earthlab\mesos\src\slave\containerizer\mesos\launch.cpp(893,47):
> message : while trying to match the argument list '(const std::string,
> std::vector<std::string,std::allocator<std::string>>)'
> [C:\Users\earthlab\mesos\build\src\mesos.vcxproj]
> launcher_tracker.cpp
> C:\Users\earthlab\mesos\src\csi/state.hpp(22,10): fatal error C1083: Cannot
> open include file: 'csi/state.pb.h': No such file or directory (compiling
> source file
> C:\Users\earthlab\mesos\src\slave\containerizer\mesos\launcher.cpp)
> [C:\Users\earthlab\mesos\build\src\mesos.vcxproj]
> mount.cpp
> switchboard.cpp
> C:\Users\earthlab\mesos\src\csi/state.hpp(22,10): fatal error C1083: Cannot
> open include file: 'csi/state.pb.h': No such file or directory (compiling
> source file
> C:\Users\earthlab\mesos\src\slave\containerizer\mesos\launcher_tracker.cpp)
> [C:\Users\earthlab\mesos\build\src\mesos.vcxproj]
> environment_secret.cpp
> posix.cpp
> backend.cpp
> provisioner.cpp
> store.cpp
> authenticatee.cpp
> authenticator.cpp
> auxprop.cpp
> basic_authenticatee.cpp
> basic_authenticator_factory.cpp
> combined_authenticator.cpp
> acls.cpp
> build.cpp
> command_utils.cpp
> protobuf_utils.cpp
> resource_quantities.cpp
> resources_utils.cpp
> roles.cpp
> type_utils.cpp
> exec.cpp
> v0_v1executor.cpp
> files.cpp
> hdfs.cpp
> checker.cpp
> checker_process.cpp
> health_checker.cpp
> devolve.cpp
> evolve.cpp
> logging.cpp
> framework.cpp
> maintenance.cpp
> master.cpp
> quota.cpp
> quota_handler.cpp
> readonly_handler.cpp
> registry_operations.cpp
> weights.cpp
> weights_handler.cpp
> allocator.cpp
> hierarchical.cpp
> offer_constraints_filter.cpp
> C:\Users\earthlab\mesos\src\master\allocator\mesos\offer_constraints_filter.cpp(26,10):
> fatal error C1083: Cannot open include file: 're2/re2.h': No such file or
> directory [C:\Users\earthlab\mesos\build\src\mesos.vcxproj]
> messages.cpp
> daemon.cpp
> driver.cpp
> disk_profile_adaptor.cpp
> sched.cpp
> scheduler.cpp
> resolver.cpp
> in_memory.cpp
> operation.cpp
> curl.cpp
> hadoop.cpp
> usage.cpp
> mesos.cpp
> version.cpp
> whitelist_watcher.cpp
> authentication.cpp
> group.cpp
> cpu.cpp
> mem.cpp
> windows.cpp{noformat}
> If you're interested in getting it built, I'll keep my Windows VM for a
> moment.
> I'm restarting with older version to see if it goes better.
>
> Best regards, Adam.
--
This message was sent by Atlassian Jira
(v8.3.4#803005)