Errors creating a canister with 'dfx deploy'

Hi

I believe so - though I’m not sure for certain. I only have that one main partition - one other I used for bootcamp years back but don’t any more. I only have one disk I run things from.

Here’s the output anyway.

df:

Filesystem    512-blocks      Used Available Capacity iused      ifree %iused  Mounted on
/dev/disk0s2   896968952 838871840  57585112    94% 2401398 4292565881    0%   /
devfs                365       365         0   100%     632          0  100%   /dev
map -hosts             0         0         0   100%       0          0  100%   /net
map auto_home          0         0         0   100%       0          0  100%   /home
/dev/disk0s4    78123000  63580208  14542792    82%  110734    7349334    1%   /Volumes/BOOTCAMP

diskutil list:

   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:      GUID_partition_scheme                        *500.1 GB   disk0
   1:                        EFI EFI                     209.7 MB   disk0s1
   2:                  Apple_HFS Matt's Mac              459.2 GB   disk0s2
   3:                 Apple_Boot Recovery HD             650.0 MB   disk0s3
   4:       Microsoft Basic Data BOOTCAMP                40.0 GB    disk0s4

Hi @canicodenow!

I’m Roman, I authored most of the replica state snapshotting code.

Thanks a lot for reporting the issue! I’m sorry that your first experience with the replica wasn’t great at all. The replica was designed to work on any modern UNIX. Unfortunately, we haven’t tested it on HFS+ file system. Until today.

I was able to reproduce the issue you see by formatting a drive as HFS+ and running dfx on it. The patch with the fix is on the way!

Boring technical details

The error happens when the replica tries to create a snapshot of its state so that it doesn’t have to execute all the blocks from scratch if it restarts. The replica tries to leverage file cloning capabilities provided by modern filesystems to make snapshotting blazingly fast. If the filesystem doesn’t support that feature (few do), we fallback to standard file copying. What you observe is a bug in the fallback mechanism: if the file cloning syscall fails, Linux kernel returns EOPNOTSUPP error code, while macOS returns ENOTSUP. We handle the former but not the latter (it’s easy to confuse them, they are actually equal on Linux, but not on macOS), so the fallback code doesn’t work properly on macOS. The fix is a one-line code change here.

I’ll do my best to make sure that the next release of dfx includes a replica that works fine on your system. Please use the emulator option suggested by @prithvi until then.

Looking forward to seeing all the great things you’ll build on the Internet Computer.

Roman

7 Likes

Hi @roman-kashitsyn and thank you for looking into it.

I’m amazed that I’ve come across a unique problem but glad it looks like a straightforward fix. In the meantime I’ll use the emulator option.

I’ll come back after the patch to let you know if it’s all working or not.

Matt