After we changed our puppetmaster to run under unicorn plus nginx and the first 2.6.0 client connected, I realised that puppetd created empty files on the client. Not even new files created are affected, but also existing files.

It seems that issue 4319 is related to that problem, as the same entries are found in the logfile.

The client reports about duplicated files in the filebucket:

info: FileBucket got a duplicate file /etc/pam.d/common-password ({md5}d41d8cd98f00b204e9800998ecf8427e)
info: FileBucket got a duplicate file /etc/pam.d/common-account ({md5}d41d8cd98f00b204e9800998ecf8427e)
info: FileBucket got a duplicate file /etc/pam.d/common-auth ({md5}d41d8cd98f00b204e9800998ecf8427e)

But hey, they are duplicate, because they all have the same checksum! And the checksum is everywhere the same, because all files are empty:

% touch test
% md5sum test
d41d8cd98f00b204e9800998ecf8427e  test

In the syslog of the puppetmaster one can see

Oct  1 14:31:14 sans-puppetca puppetmaster_unicorn: 129.132.85.166 - - [01/Oct/2010 14:31:14] "GET /production/file_content//autofs/auto.net HTTP/1.0" 404 44 0.0012

So in essence, what happens is:

  • puppetd 2.6.0 submits two slashes in the path (//)
  • puppetmaster via unicorn does not find the file, because of the double slash
  • puppetd sees the 404 error and creates a empty file

Switching to webbrick as a workaround works, because it accepts the two slashes.

Replacing the two slashes with one in the server does not fix the origin of the problem, nor does it address the issue that puppetd creates empty files, if it gets a 404 for the file content.

Update #1

I switched over to use cdist instead of Puppet.