Search in sources :

Example 1 with NetworkFacadeImpl

use of io.questdb.network.NetworkFacadeImpl in project questdb by bluestreak01.

the class IODispatcherTest method testImportMultipleOnSameConnectionSlow.

@Test
public void testImportMultipleOnSameConnectionSlow() throws Exception {
    assertMemoryLeak(() -> {
        final String baseDir = temp.getRoot().getAbsolutePath();
        final DefaultHttpServerConfiguration httpConfiguration = createHttpServerConfiguration(baseDir, false);
        final WorkerPool workerPool = new WorkerPool(new WorkerPoolConfiguration() {

            @Override
            public int[] getWorkerAffinity() {
                return new int[] { -1, -1, -1 };
            }

            @Override
            public int getWorkerCount() {
                return 3;
            }

            @Override
            public boolean haltOnError() {
                return false;
            }
        });
        try (CairoEngine engine = new CairoEngine(new DefaultCairoConfiguration(baseDir));
            HttpServer httpServer = new HttpServer(httpConfiguration, workerPool, false)) {
            httpServer.bind(new HttpRequestProcessorFactory() {

                @Override
                public HttpRequestProcessor newInstance() {
                    return new StaticContentProcessor(httpConfiguration);
                }

                @Override
                public String getUrl() {
                    return HttpServerConfiguration.DEFAULT_PROCESSOR_URL;
                }
            });
            httpServer.bind(new HttpRequestProcessorFactory() {

                @Override
                public HttpRequestProcessor newInstance() {
                    return new TextImportProcessor(engine);
                }

                @Override
                public String getUrl() {
                    return "/upload";
                }
            });
            workerPool.start(LOG);
            // send multipart request to server
            final String request = "POST /upload HTTP/1.1\r\n" + "Host: localhost:9001\r\n" + "User-Agent: curl/7.64.0\r\n" + "Accept: */*\r\n" + "Content-Length: 437760673\r\n" + "Content-Type: multipart/form-data; boundary=------------------------27d997ca93d2689d\r\n" + "Expect: 100-continue\r\n" + "\r\n" + "--------------------------27d997ca93d2689d\r\n" + "Content-Disposition: form-data; name=\"schema\"; filename=\"schema.json\"\r\n" + "Content-Type: application/octet-stream\r\n" + "\r\n" + "[\r\n" + "  {\r\n" + "    \"name\": \"date\",\r\n" + "    \"type\": \"DATE\",\r\n" + "    \"pattern\": \"d MMMM y.\",\r\n" + "    \"locale\": \"ru-RU\"\r\n" + "  }\r\n" + "]\r\n" + "\r\n" + "--------------------------27d997ca93d2689d\r\n" + "Content-Disposition: form-data; name=\"data\"; filename=\"fhv_tripdata_2017-02.csv\"\r\n" + "Content-Type: application/octet-stream\r\n" + "\r\n" + "Dispatching_base_num,Pickup_DateTime,DropOff_datetime,PUlocationID,DOlocationID\r\n" + "B00008,2017-02-01 00:30:00,,,\r\n" + "B00008,2017-02-01 00:40:00,,,\r\n" + "B00009,2017-02-01 00:30:00,,,\r\n" + "B00013,2017-02-01 00:11:00,,,\r\n" + "B00013,2017-02-01 00:41:00,,,\r\n" + "B00013,2017-02-01 00:00:00,,,\r\n" + "B00013,2017-02-01 00:53:00,,,\r\n" + "B00013,2017-02-01 00:44:00,,,\r\n" + "B00013,2017-02-01 00:05:00,,,\r\n" + "B00013,2017-02-01 00:54:00,,,\r\n" + "B00014,2017-02-01 00:45:00,,,\r\n" + "B00014,2017-02-01 00:45:00,,,\r\n" + "B00014,2017-02-01 00:46:00,,,\r\n" + "B00014,2017-02-01 00:54:00,,,\r\n" + "B00014,2017-02-01 00:45:00,,,\r\n" + "B00014,2017-02-01 00:45:00,,,\r\n" + "B00014,2017-02-01 00:45:00,,,\r\n" + "B00014,2017-02-01 00:26:00,,,\r\n" + "B00014,2017-02-01 00:55:00,,,\r\n" + "B00014,2017-02-01 00:47:00,,,\r\n" + "B00014,2017-02-01 00:05:00,,,\r\n" + "B00014,2017-02-01 00:58:00,,,\r\n" + "B00014,2017-02-01 00:33:00,,,\r\n" + "B00014,2017-02-01 00:45:00,,,\r\n" + "\r\n" + "--------------------------27d997ca93d2689d--";
            NetworkFacade nf = new NetworkFacadeImpl() {

                int totalSent = 0;

                @Override
                public int send(long fd, long buffer, int bufferLen) {
                    if (bufferLen > 0) {
                        int result = super.send(fd, buffer, 1);
                        totalSent += result;
                        if (totalSent > 20) {
                            LockSupport.parkNanos(10000);
                            totalSent = 0;
                        }
                        return result;
                    }
                    return 0;
                }
            };
            try {
                sendAndReceive(nf, request, ValidImportResponse, 3, 0, false);
            } finally {
                workerPool.halt();
            }
        }
    });
}
Also used : StaticContentProcessor(io.questdb.cutlass.http.processors.StaticContentProcessor) NetworkFacade(io.questdb.network.NetworkFacade) WorkerPool(io.questdb.mp.WorkerPool) NetworkFacadeImpl(io.questdb.network.NetworkFacadeImpl) TextImportProcessor(io.questdb.cutlass.http.processors.TextImportProcessor) WorkerPoolConfiguration(io.questdb.mp.WorkerPoolConfiguration)

Example 2 with NetworkFacadeImpl

use of io.questdb.network.NetworkFacadeImpl in project questdb by bluestreak01.

the class IODispatcherTest method testCannotSetNonBlocking.

@Test
public void testCannotSetNonBlocking() throws Exception {
    assertMemoryLeak(() -> {
        final HttpContextConfiguration httpContextConfiguration = new DefaultHttpContextConfiguration();
        final NetworkFacade nf = new NetworkFacadeImpl() {

            long theFd;

            @Override
            public long accept(long serverFd) {
                long fd = super.accept(serverFd);
                theFd = fd;
                return fd;
            }

            @Override
            public int configureNonBlocking(long fd) {
                if (fd == theFd) {
                    return -1;
                }
                return super.configureNonBlocking(fd);
            }
        };
        try (IODispatcher<HttpConnectionContext> dispatcher = IODispatchers.create(new DefaultIODispatcherConfiguration() {

            @Override
            public NetworkFacade getNetworkFacade() {
                return nf;
            }
        }, (fd, dispatcher1) -> new HttpConnectionContext(httpContextConfiguration).of(fd, dispatcher1))) {
            // spin up dispatcher thread
            AtomicBoolean dispatcherRunning = new AtomicBoolean(true);
            SOCountDownLatch dispatcherHaltLatch = new SOCountDownLatch(1);
            new Thread(() -> {
                while (dispatcherRunning.get()) {
                    dispatcher.run(0);
                }
                dispatcherHaltLatch.countDown();
            }).start();
            try {
                long socketAddr = Net.sockaddr(Net.parseIPv4("127.0.0.1"), 9001);
                long fd = Net.socketTcp(true);
                try {
                    TestUtils.assertConnect(fd, socketAddr);
                    int bufLen = 512;
                    long mem = Unsafe.malloc(bufLen, MemoryTag.NATIVE_DEFAULT);
                    try {
                        Assert.assertEquals(-2, Net.recv(fd, mem, bufLen));
                    } finally {
                        Unsafe.free(mem, bufLen, MemoryTag.NATIVE_DEFAULT);
                    }
                } finally {
                    Net.close(fd);
                    Net.freeSockAddr(socketAddr);
                }
            } finally {
                dispatcherRunning.set(false);
                dispatcherHaltLatch.await();
            }
        }
    });
}
Also used : NetworkFacade(io.questdb.network.NetworkFacade) SOCountDownLatch(io.questdb.mp.SOCountDownLatch) AtomicBoolean(java.util.concurrent.atomic.AtomicBoolean) DefaultIODispatcherConfiguration(io.questdb.network.DefaultIODispatcherConfiguration) NetworkFacadeImpl(io.questdb.network.NetworkFacadeImpl)

Example 3 with NetworkFacadeImpl

use of io.questdb.network.NetworkFacadeImpl in project questdb by bluestreak01.

the class LinuxLineUdpProtoReceiverTest method assertCannotOpenSocket.

private void assertCannotOpenSocket(ReceiverFactory factory) throws Exception {
    TestUtils.assertMemoryLeak(() -> {
        NetworkFacade nf = new NetworkFacadeImpl() {

            @Override
            public long socketUdp() {
                return -1;
            }
        };
        LineUdpReceiverConfiguration receiverCfg = new DefaultLineUdpReceiverConfiguration() {

            @Override
            public NetworkFacade getNetworkFacade() {
                return nf;
            }
        };
        assertConstructorFail(receiverCfg, factory);
    });
}
Also used : NetworkFacade(io.questdb.network.NetworkFacade) NetworkFacadeImpl(io.questdb.network.NetworkFacadeImpl)

Example 4 with NetworkFacadeImpl

use of io.questdb.network.NetworkFacadeImpl in project questdb by bluestreak01.

the class LinuxLineUdpProtoReceiverTest method assertCannotSetReceiveBuffer.

private void assertCannotSetReceiveBuffer(ReceiverFactory factory) throws Exception {
    NetworkFacade nf = new NetworkFacadeImpl() {

        @Override
        public int setRcvBuf(long fd, int size) {
            return -1;
        }
    };
    LineUdpReceiverConfiguration configuration = new DefaultLineUdpReceiverConfiguration() {

        @Override
        public NetworkFacade getNetworkFacade() {
            return nf;
        }

        @Override
        public int getReceiveBufferSize() {
            return 2048;
        }
    };
    assertReceive(configuration, factory);
}
Also used : NetworkFacade(io.questdb.network.NetworkFacade) NetworkFacadeImpl(io.questdb.network.NetworkFacadeImpl)

Example 5 with NetworkFacadeImpl

use of io.questdb.network.NetworkFacadeImpl in project questdb by bluestreak01.

the class LinuxLineUdpProtoReceiverTest method assertCannotBindSocket.

private void assertCannotBindSocket(ReceiverFactory factory) throws Exception {
    TestUtils.assertMemoryLeak(() -> {
        NetworkFacade nf = new NetworkFacadeImpl() {

            @Override
            public boolean bindUdp(long fd, int ipv4Address, int port) {
                return false;
            }
        };
        LineUdpReceiverConfiguration receiverCfg = new DefaultLineUdpReceiverConfiguration() {

            @Override
            public NetworkFacade getNetworkFacade() {
                return nf;
            }
        };
        assertConstructorFail(receiverCfg, factory);
    });
}
Also used : NetworkFacade(io.questdb.network.NetworkFacade) NetworkFacadeImpl(io.questdb.network.NetworkFacadeImpl)

Aggregations

NetworkFacadeImpl (io.questdb.network.NetworkFacadeImpl)7 NetworkFacade (io.questdb.network.NetworkFacade)6 StaticContentProcessor (io.questdb.cutlass.http.processors.StaticContentProcessor)1 TextImportProcessor (io.questdb.cutlass.http.processors.TextImportProcessor)1 SOCountDownLatch (io.questdb.mp.SOCountDownLatch)1 WorkerPool (io.questdb.mp.WorkerPool)1 WorkerPoolConfiguration (io.questdb.mp.WorkerPoolConfiguration)1 DefaultIODispatcherConfiguration (io.questdb.network.DefaultIODispatcherConfiguration)1 AtomicBoolean (java.util.concurrent.atomic.AtomicBoolean)1 AtomicInteger (java.util.concurrent.atomic.AtomicInteger)1 NotNull (org.jetbrains.annotations.NotNull)1