Hey Kieran,

 Thanks for the update.  I'll try simulating this condition locally and see
if we can get a better error message out of the code here - it'll save
folks time in the future if we don't have to repeat this exercise :-)

daniel

On Fri, Feb 2, 2018 at 4:25 AM, Kieran Caplice <kieran.capl...@temetra.com>
wrote:

> Hi Daniel,
>
> Many thanks for the reply again. An update: turns out when I rebooted the
> machine to fix the issue with running osrm-datastore across different
> users, I had forgotten that changes to /etc/sysctl.conf are not persisted
> after rebooting, so all is working fine now after adding the kernel.shmall
> and kernel.shmmax properties again.
>
> Kind regards,
> Kieran Caplice
>
> On 29/01/18 18:07, Daniel Patterson wrote:
>
> Hi Kieran,
>
>   The problem is definitely occurring when trying to allocate the shared
> memory block.  This line from your strace output shows the error happening:
>
> shmget(0x10001b9, 96772768369, IPC_CREAT|0644) = -1 EINVAL (Invalid
> argument)
>
>   I suspect the "code 21 (EISDIR)" message we're printing out here is
> wrong or misleading, maybe.
>
>   Can you try playing with the constants in this test program?
>
>
> -----------BEGIN test.c-----------------------
> #include <sys/shm.h>
> #include <stdio.h>
> #include <errno.h>
> #include <string.h>
> #include <sys/ipc.h>
>
> //#define MEMORY_SIZE 96772768369
> #define MEMORY_SIZE 1024*1024
> #define KEY_PATH "/tmp/osrm.lock"
>
> int main(void) {
>
>   key_t tok = ftok(KEY_PATH, 0);
>
>   // Original that was being called
>   //int result = shmget(0x10001b9, 96772768369, IPC_CREAT|0644);
>
>   int result = shmget(tok, MEMORY_SIZE, IPC_CREAT|0644);
>
>   if (result == -1) {
>     printf("shmget returned -1: errno is %d: %s\n", errno,
> strerror(errno));
>   } else {
>     printf("shmget worked - cleaning up\n");
>     shmctl(result, IPC_RMID, NULL);
>   }
>
> }
> --------------END test.c-----------------------------
>
>   Try different values of "MEMORY_SIZE", and also try uncommenting the
> original shmget line that I've included, see if that works standalone, and
> see what messages you get.
>
>   Compiling the test program should be a simple "gcc test.c"
>
> daniel
>
> On Mon, Jan 29, 2018 at 1:48 AM, Kieran Caplice <
> kieran.capl...@temetra.com> wrote:
>
>> Hi Julien/Daniel,
>>
>> Thanks for the replies. I had read that github issue prior to emailing
>> the list, and it did solve the initial error I was having, which was due to
>> running osrm-datastore as root and later as user "osrm". Rebooting the
>> machine solved this as it did for you, Julien. But after that I'm faced
>> with this issue.
>>
>> @Daniel: /tmp contains the two files:
>> -rw-rw-r-- 1 osrm  osrm     0 Jan 26 16:34 osrm-datastore.lock
>> -rw-rw-r-- 1 osrm  osrm     0 Jan 26 16:34 osrm.lock
>>
>> Output of the strace:
>>
>> root@htzh /opt/osrm # su - osrm -c "strace osrm-datastore
>> /opt/osrm/data/planet-latest/planet-latest.osrm"
>> ...
>> open("/opt/osrm/data/planet-latest/planet-latest.osrm.tld", O_RDONLY) = 5
>> read(5, "OSRN\5\17\0M\25\17\0\0\0\0\0\0\1\0\3\0\1\1\3\0\1\0\v\0\1\1\v\0"...,
>> 8191) = 8191
>> close(5)                                = 0
>> stat("/opt/osrm/data/planet-latest/planet-latest.osrm.partition",
>> 0x7ffcde3c8d20) = -1 ENOENT (No such file or directory)
>> stat("/opt/osrm/data/planet-latest/planet-latest.osrm.cells",
>> 0x7ffcde3c8d20) = -1 ENOENT (No such file or directory)
>> stat("/opt/osrm/data/planet-latest/planet-latest.osrm.cell_metrics",
>> 0x7ffcde3c8d20) = -1 ENOENT (No such file or directory)
>> stat("/opt/osrm/data/planet-latest/planet-latest.osrm.mldgr",
>> 0x7ffcde3c8d20) = -1 ENOENT (No such file or directory)
>> ioctl(1, TCGETS, {B38400 opost isig icanon echo ...}) = 0
>> ioctl(1, TCGETS, {B38400 opost isig icanon echo ...}) = 0
>> write(1, "[info] Allocating shared memory "..., 57[info] Allocating
>> shared memory of 96772768369 bytes
>> ) = 57
>> stat("/tmp", {st_mode=S_IFDIR|S_ISVTX|0777, st_size=4096, ...}) = 0
>> stat("/tmp/osrm.lock", {st_mode=S_IFREG|0664, st_size=0, ...}) = 0
>> stat("/tmp", {st_mode=S_IFDIR|S_ISVTX|0777, st_size=4096, ...}) = 0
>> stat("/tmp/osrm.lock", {st_mode=S_IFREG|0664, st_size=0, ...}) = 0
>> shmget(0x10001b9, 96772768369, IPC_CREAT|0644) = -1 EINVAL (Invalid
>> argument)
>> ioctl(1, TCGETS, {B38400 opost isig icanon echo ...}) = 0
>> ioctl(1, TCGETS, {B38400 opost isig icanon echo ...}) = 0
>> write(2, "\33[31m[error] Error while attempt"..., 88[error] Error while
>> attempting to allocate shared memory: Invalid argument, code 21) = 88
>> write(2, "\33[0m", 4)                   = 4
>> write(2, "\n", 1
>> )                       = 1
>> write(2, "terminate called after throwing "..., 48terminate called after
>> throwing an instance of ') = 48
>> ...
>>
>> Can you provide any further insight into what the problem might be?
>>
>> By the way, we're using the latest release version (v5.15.0) built from
>> source on 16.04.
>>
>> Kind regards,
>> Kieran Caplice
>>
>>
>> On 26/01/18 17:48, Julien Coupey wrote:
>>
>>> Hi,
>>>
>>> Not sure if you're hitting the same problem here, but I recall a related
>>> discussion happening a while back at:
>>>
>>> https://github.com/Project-OSRM/osrm-backend/issues/1724
>>>
>>> At least it provides a few hints on permissions and shared memory.
>>>
>>> Julien
>>>
>>> Le 26/01/2018 à 18:31, Daniel Patterson a écrit :
>>>
>>>> Kieran,
>>>>
>>>>    Hmm, we could probably improve the error handling here and make the
>>>> message a bit more useful.
>>>>
>>>>    The problem is probably one of:
>>>>
>>>>      1) Permission problems accessing /tmp/osrm.lock
>>>>      2) Permission problems creating shared memory
>>>>
>>>>    Code 21 is:
>>>>
>>>> $ errno 21
>>>> EISDIR 21 Is a directory
>>>>
>>>>    So I'd suspect some bad filesystem permissions somewhere. You can
>>>> try running the `osrm-datastore` command under `strace` and see if you can
>>>> spot the syscal that's failing with - that might give a hint as to what's
>>>> going wrong.
>>>>
>>>> daniel
>>>>
>>>> On Fri, Jan 26, 2018 at 8:57 AM, Kieran Caplice <
>>>> kieran.capl...@temetra.com <mailto:kieran.capl...@temetra.com>> wrote:
>>>>
>>>>     Hello,
>>>>
>>>>     I'm wondering if anyone can help out with this error I'm getting
>>>>     when running osrm-datastore under a non-root user:
>>>>
>>>>     root@htzh /opt/osrm # su - osrm -c "osrm-datastore
>>>>     /opt/osrm/data/planet-latest/planet-latest.osrm"
>>>>     [info] Loading data into REGION_1
>>>>     [info] load names from:
>>>>     "/opt/osrm/data/planet-latest/planet-latest.osrm.names"
>>>>     [info] Allocating shared memory of 96772768369 bytes
>>>>     [error] Error while attempting to allocate shared memory: Invalid
>>>>     argument, code 21
>>>>     terminate called after throwing an instance of
>>>> 'osrm::util::exception'
>>>>        what():  Invalid argumentinclude/storage/shared_memory.hpp:308
>>>>     root@htzh /opt/osrm # su - osrm -c "ulimit -a | grep max"
>>>>     max locked memory       (kbytes, -l) 128849018880
>>>>     max memory size         (kbytes, -m) unlimited
>>>>     max user processes              (-u) 1031189
>>>>
>>>>     Available shared memory for the user has been increased in
>>>>     /etc/security/limits.conf as per the wiki page, as shown above.
>>>>
>>>>     The server has 256GB of RAM, with at least 200GB available most of
>>>>     the time. I successfully ran osrm-datastore and osrm-routed as the
>>>>     root user earlier, but we would ideally run it under a separate
>>>> user.
>>>>
>>>>     Thanks in advance.
>>>>
>>>>     Kind regards,
>>>>     Kieran Caplice
>>>>
>>>>
>>>>     _______________________________________________
>>>>     OSRM-talk mailing list
>>>>     OSRM-talk@openstreetmap.org <mailto:OSRM-talk@openstreetmap.org>
>>>>     https://lists.openstreetmap.org/listinfo/osrm-talk
>>>>     <https://lists.openstreetmap.org/listinfo/osrm-talk>
>>>>
>>>>
>>>>
>>>>
>>>> _______________________________________________
>>>> OSRM-talk mailing list
>>>> OSRM-talk@openstreetmap.org
>>>> https://lists.openstreetmap.org/listinfo/osrm-talk
>>>>
>>>>
>>> _______________________________________________
>>> OSRM-talk mailing list
>>> OSRM-talk@openstreetmap.org
>>> https://lists.openstreetmap.org/listinfo/osrm-talk
>>>
>>
>>
>> _______________________________________________
>> OSRM-talk mailing list
>> OSRM-talk@openstreetmap.org
>> https://lists.openstreetmap.org/listinfo/osrm-talk
>>
>
>
>
> _______________________________________________
> OSRM-talk mailing 
> listOSRM-talk@openstreetmap.orghttps://lists.openstreetmap.org/listinfo/osrm-talk
>
>
>
> _______________________________________________
> OSRM-talk mailing list
> OSRM-talk@openstreetmap.org
> https://lists.openstreetmap.org/listinfo/osrm-talk
>
>
_______________________________________________
OSRM-talk mailing list
OSRM-talk@openstreetmap.org
https://lists.openstreetmap.org/listinfo/osrm-talk

Reply via email to