<p>Hi all</p>
<p>I encountered few days ago a problem on my proxmox cluster because of too long uptime.</p>
<p>When I try to migrate a VM or take a console, I got :</p>
<p><strong>unable to parse worker upid '......'</strong></p>
<p>I found that it was du to the regexp contained in Tools.pm that do not allow 9 digits caracters for /proc/<strong><em>pid_number</em></strong>/state  --> pstate value.<br />I then modify that perl module like this :</p>
<p><span style="font-family: courier new,courier;">---  /usr/share/perl5/PVE/Tools_20140618.pm    2014-06-18 14:20:40.000000000 +0200<br />+++  /usr/share/perl5/PVE/Tools.pm    2014-06-24 12:37:49.000000000 +0200<br />@@ -16,6 +16,7 @@<br /> use Digest::SHA;<br /> use Text::ParseWords;<br /> use String::ShellQuote;<br />+use Math::BigInt;    # Fortunately this module is available - let's load it !<br /> <br /> our @EXPORT_OK = qw(<br /> lock_file <br />@@ -758,11 +759,11 @@<br />     my $filename;<br /> <br />     # "UPID:$node:$pid:$pstart:$startime:$dtype:$id:$user"<br />-    if ($upid =~ m/^UPID:([a-zA-Z0-9]([a-zA-Z0-9\-]*[a-zA-Z0-9])?):([0-9A-Fa-f]{8}):([0-9A-Fa-f]{8}):([0-9A-Fa-f]{8}):([^:\s]+):([^:\s]*):([^:\s]+):$/) {<br />+    if ($upid =~ m/^UPID:([a-zA-Z0-9]([a-zA-Z0-9\-]*[a-zA-Z0-9])?):([0-9A-Fa-f]{8,16}):([0-9A-Fa-f]{8,16}):([0-9A-Fa-f]{8,16}):([^:\s]+):([^:\s]*):([^:\s]+):$/) {<br />     $res->{node} = $1;<br />-    $res->{pid} = hex($3);<br />-    $res->{pstart} = hex($4);<br />-    $res->{starttime} = hex($5);<br />+    $res->{pid} = Math::BigInt->from_hex($3);<br />+    $res->{pstart} = Math::BigInt->from_hex($4);<br />+    $res->{starttime} = Math::BigInt->from_hex($5);<br />     $res->{type} = $6;<br />     $res->{id} = $7;<br />     $res->{user} = $8;</span></p>
<p> </p>
<p>Note that I need to load Math::BigInt perl module.<br />If you do not do that, you'll get  that warning :</p>
<p><em><strong>Hexadecimal number > 0xffffffff non-portable at Tools.pm line ....</strong></em></p>
<p>But it works. The problem is that it can be intercepted by an eval {} and cause an exception.</p>
<p> </p>
<p>I modify too the pvemanagerlib.js file because it use the same regexp than previous perl module.</p>
<p> </p>
<p><span style="font-family: courier new,courier;">--- /usr/share/pve-manager/ext4/pvemanagerlib_20140618.js    2014-06-18 14:24:26.000000000 +0200<br />+++ /usr/share/pve-manager/ext4/pvemanagerlib.js    2014-06-24 12:36:52.000000000 +0200<br />@@ -529,7 +529,7 @@<br />     parse_task_upid: function(upid) {<br />     var task = {};<br /> <br />-    var res = upid.match(/^UPID:(\S+):([0-9A-Fa-f]{8}):([0-9A-Fa-f]{8}):([0-9A-Fa-f]{8}):([^:\s]+):([^:\s]*):([^:\s]+):$/);<br />+    var res = upid.match(/^UPID:(\S+):([0-9A-Fa-f]{8,16}):([0-9A-Fa-f]{8,16}):([0-9A-Fa-f]{8,16}):([^:\s]+):([^:\s]*):([^:\s]+):$/);<br />     if (!res) {<br />         throw "unable to parse upid '" + upid + "'";<br />     }</span></p>
<p>Hope this helps.</p>
<p>Cheers.</p>
<p> </p>
<div></div>
<div>
<p>--</p>
<hr />
<p> </p>
<p><img src="https://images.monaco-parkings.mc/signatures/sebastiencottalorda_1903.jpg" alt="" /></p>
</div>