mirror of
https://github.com/usatiuk/dhfs.git
synced 2025-10-29 04:57:48 +01:00
Dhfs-fs: mtime fix
This commit is contained in:
@@ -1,10 +1,10 @@
|
|||||||
package com.usatiuk.dhfs.files.objects;
|
package com.usatiuk.dhfs.files.objects;
|
||||||
|
|
||||||
import com.usatiuk.dhfs.JDataRemote;
|
import com.usatiuk.dhfs.JDataRemote;
|
||||||
import com.usatiuk.objects.JObjectKey;
|
|
||||||
import com.usatiuk.dhfs.jmap.JMapHolder;
|
import com.usatiuk.dhfs.jmap.JMapHolder;
|
||||||
import com.usatiuk.dhfs.jmap.JMapLongKey;
|
import com.usatiuk.dhfs.jmap.JMapLongKey;
|
||||||
import com.usatiuk.dhfs.repository.JDataRemoteDto;
|
import com.usatiuk.dhfs.repository.JDataRemoteDto;
|
||||||
|
import com.usatiuk.objects.JObjectKey;
|
||||||
|
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
@@ -28,6 +28,10 @@ public record File(JObjectKey key, long mode, long cTime, long mTime,
|
|||||||
return new File(key, mode, cTime, mTime, symlink);
|
return new File(key, mode, cTime, mTime, symlink);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public File withCurrentMTime() {
|
||||||
|
return new File(key, mode, cTime, System.currentTimeMillis(), symlink);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Collection<JObjectKey> collectRefsTo() {
|
public Collection<JObjectKey> collectRefsTo() {
|
||||||
return Set.of();
|
return Set.of();
|
||||||
|
|||||||
@@ -247,7 +247,7 @@ public class DhfsFileServiceImpl implements DhfsFileService {
|
|||||||
} else if (dent instanceof RemoteObjectMeta) {
|
} else if (dent instanceof RemoteObjectMeta) {
|
||||||
var remote = remoteTx.getData(JDataRemote.class, uuid).orElse(null);
|
var remote = remoteTx.getData(JDataRemote.class, uuid).orElse(null);
|
||||||
if (remote instanceof File f) {
|
if (remote instanceof File f) {
|
||||||
remoteTx.putData(f.withMode(mode).withMTime(System.currentTimeMillis()));
|
remoteTx.putData(f.withMode(mode).withCurrentMTime());
|
||||||
return true;
|
return true;
|
||||||
} else {
|
} else {
|
||||||
throw new IllegalArgumentException(uuid + " is not a file");
|
throw new IllegalArgumentException(uuid + " is not a file");
|
||||||
@@ -453,7 +453,7 @@ public class DhfsFileServiceImpl implements DhfsFileService {
|
|||||||
jMapHelper.put(file, JMapLongKey.of(e.getKey()), e.getValue());
|
jMapHelper.put(file, JMapLongKey.of(e.getKey()), e.getValue());
|
||||||
}
|
}
|
||||||
|
|
||||||
remoteTx.putData(file);
|
remoteTx.putData(file.withCurrentMTime());
|
||||||
|
|
||||||
return (long) data.size();
|
return (long) data.size();
|
||||||
});
|
});
|
||||||
@@ -544,7 +544,7 @@ public class DhfsFileServiceImpl implements DhfsFileService {
|
|||||||
jMapHelper.put(file, JMapLongKey.of(e.getKey()), e.getValue());
|
jMapHelper.put(file, JMapLongKey.of(e.getKey()), e.getValue());
|
||||||
}
|
}
|
||||||
|
|
||||||
remoteTx.putData(file);
|
remoteTx.putData(file.withCurrentMTime());
|
||||||
return true;
|
return true;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -111,6 +111,7 @@ public abstract class DhfsFileServiceSimpleTestImpl {
|
|||||||
|
|
||||||
var uuid = ret.get();
|
var uuid = ret.get();
|
||||||
|
|
||||||
|
var curMtime = fileService.getattr(uuid).get().mtime();
|
||||||
fileService.write(uuid, 0, new byte[]{0, 1, 2, 3, 4, 5, 6, 7, 8, 9});
|
fileService.write(uuid, 0, new byte[]{0, 1, 2, 3, 4, 5, 6, 7, 8, 9});
|
||||||
Assertions.assertArrayEquals(new byte[]{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}, fileService.read(uuid, 0, 10).get().toByteArray());
|
Assertions.assertArrayEquals(new byte[]{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}, fileService.read(uuid, 0, 10).get().toByteArray());
|
||||||
Assertions.assertArrayEquals(new byte[]{2, 3, 4, 5, 6, 7, 8, 9}, fileService.read(uuid, 2, 8).get().toByteArray());
|
Assertions.assertArrayEquals(new byte[]{2, 3, 4, 5, 6, 7, 8, 9}, fileService.read(uuid, 2, 8).get().toByteArray());
|
||||||
@@ -123,6 +124,9 @@ public abstract class DhfsFileServiceSimpleTestImpl {
|
|||||||
fileService.write(uuid, 3, new byte[]{17, 18});
|
fileService.write(uuid, 3, new byte[]{17, 18});
|
||||||
Assertions.assertArrayEquals(new byte[]{0, 1, 2, 17, 18, 11, 15, 16, 8, 9, 13, 14}, fileService.read(uuid, 0, 12).get().toByteArray());
|
Assertions.assertArrayEquals(new byte[]{0, 1, 2, 17, 18, 11, 15, 16, 8, 9, 13, 14}, fileService.read(uuid, 0, 12).get().toByteArray());
|
||||||
|
|
||||||
|
var newMtime = fileService.getattr(uuid).get().mtime();
|
||||||
|
Assertions.assertTrue(newMtime > curMtime);
|
||||||
|
|
||||||
fileService.unlink("/writeTest");
|
fileService.unlink("/writeTest");
|
||||||
Assertions.assertFalse(fileService.open("/writeTest").isPresent());
|
Assertions.assertFalse(fileService.open("/writeTest").isPresent());
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user