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