Den mån 17 juni 2019 kl 07:47 skrev Elvis Stansvik <elvst...@gmail.com>:
>
> Den mån 17 juni 2019 kl 01:29 skrev Federico Buti <fed.b...@gmail.com>:
> >
> > Hi Thiago.
> >
> > Thanks for the feedback.
> > I'm on Fedora 29 so definitely not on an old kernel as that. My colleague 
> > is on Ubuntu but I'm pretty sure it is a 16.xx release. I guess the usage 
> > of renameat2() is failing for some other reason. What could that be? Any 
> > idea?
>
> Apart from what Thiago said (you need a Qt built on a kernel that

s/kernel/glibc/

> supports the syscall), another reason could be the file system that
> does not support renameat2.
>
> For example non-local file systems (e.g. Samba/NFS/...) and eCryptfs
> do not support it.
>
> (I once made a bugreport against QTemporaryFile::rename about this,
> https://bugreports.qt.io/browse/QTBUG-64008 , and Thiago fixed it by
> making QFileSystemEngine fall back to link/unlink if renameat2 fails
> with EINVAL)
>
> Elvis
>
> Elvis
>
> >
> > Just in case, here is the code of the test. It basically create two 
> > temporary directories, starts watching on one of them via our 
> > FileEventsGatherer class and once the files are moved via QFile::rename, it 
> > compares the number of registered move/renames with the expect ones. 
> > "mkFile" just creates the file via QFile. No more, no less.
> >
> > void <---->::testMoveFile()
> > {
> >     QFETCH(QStringList,
> >            fileNames);
> >     QFETCH(qint32,
> >            expectedResult);
> >     QFETCH(bool,
> >            rename);
> >
> >     QTemporaryDir monitoredDir;
> >     QTemporaryDir externalDir;
> >     FileEventsGatherer feg;
> >     feg.setPath(monitoredDir.path(),
> >                 FileEventsGatherer::FILE_EVENT__ALL,
> >                 OUTBOX_FILE_NAME_FILTER);
> >     QSet<QString> overallMoved;
> >     connect(&feg,
> >             &FileEventsGatherer::filesMoved,
> >             this,
> >             [&overallMoved](QSet<QString> const &movedFiles)
> >             {
> >                 overallMoved.unite(movedFiles);
> >             });
> >
> >     for (auto const &file : fileNames)
> >     {
> >         QString const choosenPath {rename
> >                                    ? monitoredDir.path()
> >                                    : externalDir.path()};
> >         auto const sourcePath = 
> > QString("%1/%2").arg(choosenPath).arg("TempName");
> >         auto const destPath = 
> > QString("%1/%2").arg(monitoredDir.path()).arg(file);
> >         mkFile(sourcePath);
> >         QFile mover(sourcePath);
> >         mover.rename(destPath);
> >     }
> >
> >     QTest::qWait(SIGNALS_TIMEOUT_MS);
> >     QCOMPARE(overallMoved.count(),
> >              expectedResult);
> > }
> >
> > Thanks,
> > F.
> >
> >
> > On Sat, 15 Jun 2019 at 20:50, Thiago Macieira <thiago.macie...@intel.com> 
> > wrote:
> >>
> >> On Saturday, 15 June 2019 08:58:31 PDT Federico Buti wrote:
> >> > We gave strace a go and we noticed that 5.12 runtime acts differently for
> >> > rename/move operations (see attached compare screenshot). In particular, 
> >> > on
> >> > 5.6 we have an actual rename whereas a link/unlink sequence happens on
> >> > 5.12. That sequence is not detected by our code, generating the failure.
> >>
> >> Alternative: upgrade your system to a version that supports the renameat2()
> >> system call. You need a 3.16 Linux kernel and glibc 2.28.
> >>
> >> The link()/unlink() sequence is used on Unix filesystems to prevent 
> >> rename()
> >> clobbering existing files, as promised in our API, but they're only 
> >> attempted
> >> if renameat2() fails.
> >>
> >> --
> >> Thiago Macieira - thiago.macieira (AT) intel.com
> >>   Software Architect - Intel System Software Products
> >>
> >>
> >>
> >> _______________________________________________
> >> Interest mailing list
> >> Interest@qt-project.org
> >> https://lists.qt-project.org/listinfo/interest
> >
> > _______________________________________________
> > Interest mailing list
> > Interest@qt-project.org
> > https://lists.qt-project.org/listinfo/interest
_______________________________________________
Interest mailing list
Interest@qt-project.org
https://lists.qt-project.org/listinfo/interest

Reply via email to